
我的劇本裡面有這個。但回傳一個錯誤。如果我在控制台中執行命令效果很好
./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
在腳本中使用了該變數。這恰好是 shell 用來尋找可執行檔的變數。這意味著,如果將其更改為非:
- 分隔的路徑清單的其他內容,或者更改為不包含腳本使用的可執行檔案的路徑,則 shell 可能不再找到類似mv
或其他標準實用程式的內容。
基於這個原因,最好在 shell 腳本變數中使用小寫字母(這是一個品味問題1),或者至少要知道 shell 使用一些變數來執行各種操作,並且您應該避免修改這些變量,除非,當然,您想改變shell 的行為。
Bash 使用的變數列在 Bash 手冊中的「Shell 變數」標題下。
順便說一句,cd
上面一行做工作。這是因為它是一個內建在 shell 本身的特殊實用程式。因此,外殼不必通過查看來$PATH
找出它在哪裡。
另外順便說一句,你說那$PATH
是你的工作目錄。 shell 已將目前工作目錄儲存在$PWD
.
附帶說明一下,養成對變數進行雙引號的習慣。看 ”忘記在 bash/POSIX shell 中引用變數的安全隱患」。
1 嗯,大多數情況下,但 POSIX 標準保留大寫變數的命名空間環境變數(即導出的 shell 變數)由 shell 和標準實用程式集合使用。據我所知,事實並非如此不允許大寫字元的使用非導出的 shell 變數,但定義命名空間的全部目的是避免衝突。由於對於腳本來說,環境變數和 shell 變數具有相同的語義,因此最好完全避免使用大寫變數。