mv:PATH変数を変更するスクリプトで実行すると見つかりません。

mv:PATH変数を変更するスクリプトで実行すると見つかりません。

私のスクリプトにこれがあります。しかし、エラーを返します。コンソールでコマンドを実行するとうまくいきます

./script.sh[16]: mv: not found [No such file or directory]

T353で始まる一部のファイルをあるフォルダから別のフォルダに移動したいと思います。リモートパス/tmp/で私の作業ディレクトリです。

cd $REMOTE_PATH
mv T353* $PATH #this is the line 16

私のmake mv /tmp/T353* .仕事がうまくいけば。

ベストアンサー1

PATHスクリプトでこの変数を使用しているようです。これは、シェルが実行可能ファイルを見つけるために使用する変数です。これは:、パスを区切られたパスのリスト以外のパスに変更したり、スクリプトで使用されている実行可能ファイルが含まれていないパスに変更したりすると、シェルがもはや類似しているか、mv他の標準ユーティリティを見つけることができないことを意味します。

このため、シェルスクリプト変数に小文字を使用することをお勧めします(味の問題です1 。あるいは、少なくともシェルがさまざまな操作を実行するためにいくつかの変数を使用すること、そしてそうでない限り、その変数を変更しないでください。 、シェルの動作を変更したい。

Bashで使用される変数は、Bashマニュアルの「Shell Variables」のタイトルの下にリストされています。

しかし、cd上の行はする働くこれは、シェル自体に組み込まれた特殊なユーティリティーだからです。したがって、シェルは$PATHそれがどこにあるかを見つけるために見つける必要はありません。

ところで、あなたはそれが$PATHあなたの作業ディレクトリであると言いました。シェルは現在の作業ディレクトリを$PWD

ちなみに、変数を二重引用符で囲む習慣を入れてください。望むより」bash / POSIXシェルで変数を引用することを忘れてしまうセキュリティリスク」。


1まあ 、ほとんどの場合POSIX標準は大文字変数の名前空間を保持環境変数(つまり、エクスポートされたシェル変数)は、シェルと標準ユーティリティセットで使用されます。私の知る限りではそうではありません。許可されていません大文字の使用エクスポートされていないシェル変数ただし、名前空間を定義する全体的な目的は、競合を防ぐことです。環境変数とシェル変数はスクリプトと同じ意味を持つため、大文字変数を一緒に使用しないことをお勧めします。

おすすめ記事