1

簡単なスクリプトを作成しました:

echo "the path of the current directory is `pwd`"

名前で保存しましたpathinfo

次に、ホームページにパスとしてbinディレクトリを作成 /home/vpnsadmin/bin し、スクリプト(pathinfo)をそのbinディレクトリにコピーしました。

このスクリプトをコマンドとして実行したいのですが、エラーが表示されます

-bash: /usr/bin/test2: No such file or directory

しかし、スクリプト (パス情報) を「/usr/bin/」にコピーすると、コマンドとして実行されます。

PATH環境変数は次のように設定されています-

PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/home/vpnsadmin/bin

私の質問は、シェルが に存在する場合、シェルがそれをコマンドとして実行しないのはなぜですか/home/vpnsadmin/bin。または、なぜバイナリのみをチェックし、/usr/binat/home/vpnsadmin/binまたはatではチェックしないのですか/bin

4

3 に答える 3

3

コマンドを実行するシェルは、実行時に正しい PATH 変数を設定する必要があり、シェルによっては、使用可能なコマンドの独自の内部 (ハッシュ) マップを作成する必要がある場合があります。

bash を使用していると仮定して、スクリプトを に保存して次のことを試してください/usr/bin

$ PATH=/ test2

$ PATH=/usr/bin test2

最初のケースでは、予想される「見つかりません」というエラーが発生するはずですが、2 番目のケースでは機能するはずです。実行する3番目のテストは演習として残されています...

そして、実際にやろうとした場合、提供されたエラーメッセージは少し奇妙に見えると言わざるを得ません

$ test2

ではない

$ /usr/bin/test2

コマンドを にコピーする前に/usr/bin

編集:

また、形や形を問わず、スクリプトのテストに名前を付けることは避けてください。これは初心者にとって非常に多くの混乱を引き起こします。

ヒント:

man test

于 2012-04-05T12:52:20.140 に答える
0

への呼び出しを含む別のスクリプトがpathinfoパスのどこかにあります/usr/bin/test2

whereis pathinfoいくつあるかをwhich pathinfo確認し、シェルが現在どれを優先しているかを確認してください。

于 2012-04-05T13:21:50.240 に答える
0

スクリプトの先頭に bash へのパスがありましたか? pwd の周りにバッククォートを使用しましたか?

#!/bin/bash
echo "the path of the current directory is `pwd`"

ファイルを実行可能にしましたか?

chmod +x pathinfo
于 2012-04-05T12:46:42.473 に答える