簡體   English   中英

Ubuntu Bash腳本執行帶空格的命令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM