#!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 --
ダッシュで始まるスクリプトパス関連の問題を回避します。