$ PATHにスペースを含むファイルにコマンドを適用するには?

$ PATHにスペースを含むファイルにコマンドを適用するには?

私の$ PATHには/a/path/with space/in/itがあります。

そのパスにある実行可能ファイルを実行するには、実行可能ファイル名を入力するだけです。

ただし、コマンドを適用しようとすると、「見つかりません」エラーで失敗します。

例えば。私のパスにprog.pyというPythonスクリプトがあります。

prog.pyと入力すると、シェルはそれを実行しようとします。したがって、このパスは有効です。しかし:

$ python3 prog.py

python3: can't open file 'prog.py': [Errno 2] No such file or directory

$ file prog.py

prog.py: cannot open `prog.py' (No such file or directory)

prog.pyの実際の場所に移動して同じコマンドを試してみると、期待どおりに実行されます。

$ file ./prog.py

./prog.py: Python script, ASCII text executable

$ python3 ./prog.py

True

なぜこれが起こるのですか?どこにいても(特にpython3)、これらのコマンドを実行するにはどうすればよいですか?

ベストアンサー1

これは、スペースを含むディレクトリ名とは関係ありません。相対パスを実行またはpython3 prog.py指定するfile prog.pyと、標準のUnixセマンティクスは現在の作業ディレクトリで開かれることを意味します。これを変える合理的な方法はありません。

しかし、スクリプトを実行可能にして()上部に正しい行があることをchmod +x /path/to/prog.py確認したら(おそらく)、(いいえ)と言ってどこでも実行できます。#!#! /usr/bin/python3prog.pypython3 prog.py

$PATHところで、通常、プログラムが実装を指定する拡張を含めないことをお勧めします。これは事実上階層化違反だからです。prog代わりに(適切な置換を使用して)呼び出すことをお勧めしますprog.py

おすすめ記事