Shell-Script

命令在 bash 腳本中不可用

  • April 14, 2019

我的公司有一個我們在 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_aliasesshell 選項使用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"

引用自:https://unix.stackexchange.com/questions/430255