![](/img/trans.png)
[英]Bash script : Storing command with spaces and arguments in variable and then executing
[英]Ubuntu Bash Script executing a command with spaces
我有一個問題,我嘗試了幾種方法來解決此問題,但我似乎無法解決。
所以我有兩個shell腳本。
background.sh :這將在后台運行給定命令並重定向輸出。
#!/bin/bash
if test -t 1; then
exec 1>/dev/null
fi
if test -t 2; then
exec 2>/dev/null
fi
"$@" &
main.sh :該文件只是作為后台進程啟動模擬器(genymotion)。
#!/bin/bash
GENY_DIR="/home/user/Documents/MyScript/watchdog/genymotion"
BK="$GENY_DIR/background.sh"
DEVICE="164e959b-0e15-443f-b1fd-26d101edb4a5"
CMD="$BK player --vm-name $DEVICE"
$CMD
當我的目錄中沒有空格時,這可以正常工作。 但是,當我嘗試執行以下操作時: GENY_DIR="home/user/Documents/My Script/watchdog/genymotion"
目前我別無選擇。 我收到一條錯誤消息,指出找不到文件或目錄。 我試圖在報價單中加上"$CMD"
,但沒有用。
您可以通過嘗試將任何東西作為后台進程運行來進行測試,而不必一定是模擬器。
任何建議或反饋將不勝感激。 我也試着做。
BK="'$BK'"
要么
BK="\\"$BK\\""
要么
BK=$( echo "$BK" | sed 's/ /\\\\ /g' )
不要嘗試將命令存儲在字符串中。 改用數組:
#!/bin/bash
GENY_DIR="$HOME/Documents/My Script/watchdog/genymotion"
BK="$GENY_DIR/background.sh"
DEVICE="164e959b-0e15-443f-b1fd-26d101edb4a5"
CMD=( "$BK" "player" --vm-name "$DEVICE" )
"${CMD[@]}"
數組正確保留了單詞邊界,因此一個帶空格的參數仍然是一個帶空格的參數。
由於分詞的工作方式,在空格前面或引號內添加文字反斜杠將不會產生有用的效果。
John1024提供了一個很好的參考資料來源: 我試圖將命令放入變量中,但是復雜的情況總是會失敗!
嘗試這個:
GENY_DIR="home/user/Documents/My\ Script/watchdog/genymotion"
您可以使用反斜杠轉義空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.