web-dev-qa-db-ja.com

/ usr / bin / envはLinux Shebang行でどのように機能しますか?

私はこのようなシバンラインを知っています:

#!/bin/sh

しかし、私はこのようにシバンラインを使用することもできることを知りました:

#!/usr/bin/env python3

これは私を混乱させます、誰かがLinuxがこれをどのように処理するか私に説明できますか?

10
user1187968

新しい* nixバージョンは、コマンドwhichが機能するのと同じ方法でこれを解決します。

環境変数$ PATHで設定されているすべてのディレクトリ(グローバル、.bashrcまたはその他のログオンスクリプト、または手動)を1つずつ検索し、最初の一致を返します。

重要なのは、一部のLinuxバージョンではエイリアスファイル(別名symlinks)が作成されることです。 debian。

また、bashコマンドのエイリアスは、最初に実行されるときにこの動作を上書きします。

1
Marcel Nolte

本質的に好き

tail -n +1 yourfile | /usr/bin/env python
0
#!/bin/sh

はインタプリタバイナリのパスにすぎませんが、

#!/usr/bin/env python3

python3インタープリターへのオプションの引数として#!/usr/bin/envを渡すインタープリターのパスがあります

詳しくは wiki を参照してください。

0
Bharathi