shebang行に#!commandを使用するとどうなりますか?

shebang行に#!commandを使用するとどうなりますか?
#!python3
print("Hello")

私はこのコードが私の端末で正しく動作することを発見しました。しかし、誰もがそう#!/path/to/fileするか#!/usr/bin/env command

#!commandシャバンラインでの使用を避けるべき理由はありますか?

ベストアンサー1

通常、パスのないshebangは、shebangのコマンドが現在のディレクトリにあると仮定します。より一般的には、絶対的ではないshebangは、スクリプトを実行するプロセスの現在のディレクトリに基づいて解釈されます。

コマンドが現在のディレクトリにないパスのないshebangは、スクリプトが一部のシェル(少なくともZsh、Bashではない)で起動された場合にのみ機能し、シェルが提供するヘルプのために機能します。スクリプトが実行されると実行は失敗しますが、ルールは次のとおりです。シェルがスクリプトだと思う場合は、スクリプトの実行を試みます。; Zshはそのパスでshebangコマンドを探しますが、これは標準ではありません。

パスのないshebangコマンドを含むスクリプトは、他のコンテキストでは実行されません。

PATHベースのshebangを作成する慣用的な方法は、/usr/bin/env前述のようにを使用することです。

#! /usr/bin/env python3

または一部のバージョンでenv

#! /usr/bin/env -S python3 --

ダッシュで始まるスクリプトパス関連の問題を回避します。

おすすめ記事