0
我已經繼承了一個shell腳本,它執行一個帶有變量的命令。 我加入了更多細節,對不起,我是不是在早期的細節清楚,我不是外殼腳本shell腳本傳遞星號
#!/bin/sh
ExecuteCommand() {
Command=`echo -e ${2}`
Comment=${4}
echo "INFO: ${Comment}"
echo "# ${Comment}" >> ${CommandsLog}
echo "${Command}" | paste -s -d' ' | tee -a ${CommandsLog}
echo "" | tee -a ${CommandsLog}
eval ${Command} | grep -v "ERROR : bad number of fields"
ExitCode=$?
if [ "${ExitCode}" != "0" ] && [ "${ExitCode}" != "" ]
then
exit ${ExitCode}
fi
}
set Option = echo ` '.*(def).*'`
echo $Option
ExecuteCommand -command "abc ${Option}"
非常熟悉望着正在執行的命令日誌是沒有「*
」; 即
.*(def).*
abc '. (def). '
由於命令缺少「」,則命令失敗 我曾試圖通過在「$選項」可變但到失敗。 如何將''傳遞給命令。
你的問題不明確。 shebang線是好的。下一行似乎執行一個名爲'ExecuteCommand'的命令,其中一個選項是'-command',另一個是擴展''abc $ {Option}「''的結果,但腳本中沒有任何設置'$ { Option}',因此它可以是空的或者是一個環境變量 - 但是你沒有告訴我們關於環境變量的內容。第三行代碼選擇在'$ {Option}'中運行任何命令的名稱 - 或者,如果$ {Option}中沒有任何內容,它將運行命令'is'而不是 - 帶有一些參數。這是怎麼回事? –
現在,如果「腳本的第三行」真的在運行,那麼「環境變量'Option'設置爲''。*(def)。*''',那麼我們就進入了一個不同的球類遊戲可能是蟋蟀而不是棒球)但是,關於如何將信息傳遞到日誌文件還有很多未知的知識,也就是說,你如何得到星星的空白並不明顯,一般來說,引用星星可以防止它們被擴展 –
在上述正確提到的所有不確定性的情況下,唯一的建議是在你的命令中包含'$ {Option}'的單引號(例如''abc'$ {Option}'「'。我不能保證將解決這個問題,但它是在可能的範圍內。 –