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 マニュアルの「シェル変数」という見出しの下にリストされています。

ちなみに、cd上の行のする動作します。これは、シェル自体に組み込まれた特別なユーティリティであるためです。したがって、シェルは$PATHそれがどこにあるかを調べる必要がありません。

ちなみに、 は$PATH作業ディレクトリだとおっしゃっています。シェルは既に現在の作業ディレクトリを に保存しています$PWD

ちなみに、変数を二重引用符で囲む習慣をつけましょう。「bash/POSIX シェルで変数を引用符で囲み忘れた場合のセキュリティへの影響「」。


1 まあ、大部分はそうですが、POSIX標準大文字の変数の名前空間を予約する環境変数(つまり、エクスポートされたシェル変数)はシェルと標準ユーティリティのコレクションによって使用されます。私の知る限り、それは許可しない大文字の使用エクスポートされていないシェル変数ただし、名前空間を定義する目的は衝突を避けることです。スクリプトにとって、環境変数とシェル変数は同じ意味を持つため、大文字の変数は避けた方がよいでしょう。

関連情報