Shell-Script
命令在 bash 腳本中不可用
我的公司有一個我們在 Linux 中安裝的自定義工具,用於將文件上傳到名為
oTools
. 當我打開一個新終端時,我可以執行(從任何文件夾)oTools upload file
並將文件上傳到伺服器。但是,該工具沒有一次上傳多個文件的選項。所以我正在嘗試建構一個 bash 腳本來做到這一點。這是我建構的程式碼
#!/bin/sh for file in ./folder/* do oTools upload $file done
但我遇到以下錯誤:
./upload-all.sh: oTools: 未找到
我檢查了我的文件
.bashrc
,它包含 oTools 的路徑:alias oTools="/home/user/folder/oTools-cli"
我也嘗試將完整路徑放在我的腳本上(上面的路徑,即在
.bashrc
文件中),但我遇到了同樣的問題。我嘗試使用ls
而不是我安裝的工具來執行相同的程式碼並且它有效……那麼,如何製作 bash 腳本來辨識我的自定義工具?
當您編寫腳本時,它通常不會引入您的別名。
您可以考慮在腳本中明確指定命令:
#!/bin/sh oTools="/home/user/folder/oTools-cli" for file in ./folder/* do ${oTools} upload "${file}" done
你至少面臨兩個問題:
- 當 shell 不是互動式時,別名不會擴展,除非
expand_aliases
shell 選項使用shopt
..bashrc
通常包含互動式 shell 的配置,而不是腳本(也稱為非互動式 shell)的配置。有一些解決方案:
# Set expand_aliases option and add the alias (in your script) shopt -s expand_aliases alias oTools="/home/user/folder/oTools-cli" # Create a function instead of an alias (in your script) oTools() { /home/user/folder/oTools-cli "$@"; } # Add /home/user/folder to your PATH (in your .profile) PATH="/home/user/folder:$PATH"