gpt4 book ai didi

linux - Ubuntu Bash 脚本执行带空格的命令

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:10:09 25 4
gpt4 key购买 nike

我遇到了一些问题,我尝试了几种方法来解决这个问题,但我似乎做不到。

所以我有两个 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

"$@" &

ma​​in.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 推荐了一个很好的额外阅读来源:I'm trying to put a command in a variable, but the complex cases always fail!

关于linux - Ubuntu Bash 脚本执行带空格的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38535086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com