#!/usr/bin/env bash ← 🤔 (28レス)
上下前次1-新
1: 04/07(月)00:34 ID:s+VUvHBA(1) AAS
正統派なら
#!/bin/bash
#!/usr/bin/python3
など決め打ちだろ
バージョン違いで挙動が異なるなら尚更決め打ち
bashやpython3の場所が異なる可能性を挙げていて
envは変わる確率が低いという無茶苦茶謎理論
外部リンク:news.mynavi.jp
インストール先に合わせて
#!/usr/local/bin/pytho3
とか書き換えろよ
それもできないようなのがスクリプト走らすとか恐怖だよ
2(1): 04/07(月)08:42 ID:Sspbwbz9(1) AAS
変な絵文字入れるの流行ってんのか?
3: 05/23(金)21:17 ID:0cRRXvyK(1) AAS
POSIX UNIX and Linux script best practice guideが参考になるぞ
その書き換えを不要にするのがenvであり、
/usr/bin/env bashとか/usr/bin/env python3といったshbangで
期待されている動作をするよう
OSは構築されていることが求められている
4(1): 05/30(金)12:06 ID:uRKoLJif(1/2) AAS
env はなぜ
/usr/bin/env で決め打ちできるわけ?
システムに複数のpython3がある場合にどの python3で動くか決定的ではなく
ユーザー設定によるので当てにならない
5: 05/30(金)12:09 ID:uRKoLJif(2/2) AAS
例えば
/usr/bin/python3
/usr/local/bin/python3
/home/userA/bin/python3
とある場合
env で呼ばれる python3 は$PATHによって異なる
6: 05/30(金)16:51 ID:xhoREEXj(1) AAS
ユーザーがactivateしたvenvと同じ環境で走らせたいスクリプトもあれば固定環境で走らせたいスクリプトもあるだろ
使い分けろ
7(1): 05/31(土)20:24 ID:nUxZuYDd(1) AAS
>>4
/usr/bin/envは決め打ちしているものではなく、
利用者は/usr/bin/envがある環境を用意する責任がある、という指針の結果だよ
Pythonの件も、利用者にはenvの評価結果で適切なpython3が選ばれるような
環境を用意する責任がある
そういう責任共有モデル
8(1): 06/01(日)03:57 ID:SR02+F16(1/2) AAS
#!/usr/bin/python3
を自分の好みにあわせて
#!/home/userA/bin/python3
などと書換える方が安全だと思う
こっちは全部自分の意志で行うから
#!/usr/bin/env python3
は不適切でも動いちゃう
9: 06/01(日)11:32 ID:OLS6TxiM(1) AAS
>>8
利用者がPythonを好みで選べる環境を作ったのなら、
#!/usr/bin/env python3 なスクリプトが
好みのPythonで起動できる状態にするのは利用者の責任となるのではないかな
昨今のEPPやクラウドの監視が動いてる環境だと、shebangだけとはいえスクリプトを改変すると、
レポジトリに登録されているものから改変されている等と警告が上がるかと
そういう面倒な検知を防ぎつつ、本当のスクリプトの改変を検知できるようにするためにも、
shebangでは/usr/bin/envを使いましょうね、と
10: 06/01(日)11:44 ID:SR02+F16(2/2) AAS
上で出ていた
POSIX UNIX and Linux script best practice guide
なり
このもとの理論ってどこにあるの?
誰が提唱しているの?
11: 06/01(日)14:28 ID:CXRoilnc(1) AAS
複数のpython3 っておまえ面倒くせえことしてるなw
12: 06/01(日)19:59 ID:hIpIBTye(1/2) AAS
venvやコンテナ使ってれば複数あるのは当たり前でしょ
13: 06/01(日)20:12 ID:cqop4uSm(1) AAS
この環境は/bin/shがdashなのでshebangはこう変える、
あのスクリプトはあのバージョンのPythonを使いたいのでこうする、というのって
過去の名残というよりも、それが腐ってできたバッドノウハウだと思うんよね
14: 06/01(日)20:17 ID:hIpIBTye(2/2) AAS
それ言ったら#!自体がなー
ファイルの拡張属性でやるのが正解とは思う。FAT系のことは忘れろ
15: 06/01(日)20:57 ID:f2koINJC(1) AAS
全部同じ環境にするのは無理です終わり
16: 06/02(月)03:10 ID:xo4/TAEW(1) AAS
なので、スクリプトはenvを使う、利用者はそれ前提で環境を作る、というのが落としどころなのだろう
17: 06/02(月)20:41 ID:Vp1AjuB0(1) AAS
これLinuxが普及してスクリプトを動かす人が
#! の意味も分からない書換えもできないまま動かしているからだよね
Windowsのマルウェアと同じで危険な兆候なんじゃないの?
最低限の知識も持たず使う人たちの存在
18: 06/02(月)21:20 ID:5/UW0z/h(1) AAS
シバン書き換えたら改ざん検知されたでござる
まあもうそういう時代なのだから、envを利用する、に舵を切ってもよいのでは
Linuxに閉じた話とするにしてもbash、dash、zshが入り乱れているのだしさ
19: 06/02(月)22:37 ID:NF5N+/2D(1) AAS
もう誰も興味無いんだわOSの仕組みなんか
20: 06/14(土)13:48 ID:HGD7iMV2(1) AAS
やっぱりみんなユーザランドよりカーネルのほうが興味あるんだね
21: 06/14(土)20:03 ID:yrLG8RWJ(1/3) AAS
外部リンク[html]:docs.python.org
Pythonチュートリアル 16.1.2. 実行可能な Python スクリプト
#!/usr/bin/env python3
外部リンク[html]:docs.python.org
Python のセットアップと利用 2.4. その他
いくつかの Unix は env コマンドを持たないので、
インタープリターのパスを /usr/bin/python3 のように
ハードコードしなければならない
22: 06/14(土)20:07 ID:yrLG8RWJ(2/3) AAS
外部リンク:perldoc.perl.org
put this as the first line of your script:
#!/usr/bin/env perl
You can also put directly the path to your perl executable, like in
#!/usr/bin/perl
23: 06/14(土)20:23 ID:yrLG8RWJ(3/3) AAS
外部リンク[html]:www.gnu.org
Bash Reference Manual
Bash scripts often begin with
#! /bin/bash
if it’s been installed in another directory:
#!/usr/bin/env bash
24(1): 06/15(日)17:36 ID:FDKRbYvX(1) AAS
>>2
クソジジイって言われてそう
25: 07/23(水)06:00 ID:bkgeRWwU(1) AAS
>>24
職場で仕事の邪魔してそう
26: 09/20(土)14:13 ID:rm9y10jT(1) AAS
ln -s で固定します
27: 10/12(日)08:03 ID:K2nNFmqm(1) AAS
>>7
いいモデル、そして慣習とは思うが
(今普及しているの実装の)envはあまりに色々多機能過ぎて第三者の再実装がとても難しい…
man見てみたら宇宙猫になるよ!!
#! /usr/bin/env interpreter
でPATHから予測可能な順序で正しいinterpreter選んでくれる、それだけで十分なのに
環境変数からみ、複数引数対応の為の難解なエスケープ規則etc etc、肥大化しすぎ
どこか…posix?でもlsb?でもいいから、利害団体で必要最小限の機能を定めて公布してほしいよ…
28: 10/12(日)13:51 ID:QAp1T8of(1) AAS
「お前らもう何もするな」って言いたくなることがITには多すぎる
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.325s*