我正在尝试使用变量来构造--command
arg gnome-terminal
。
我的 shell 脚本如下所示:
buildId="aa-bb-cc"
versionCode="123456"
daily="daily"
gnome-terminal -e 'sh -c "while true; do
python acra.py $versionCode $buildId 0 $daily
sleep 600 # 10 mins
done"'
但是当我运行这个脚本时,新终端打开,但它无法识别这些变量,我只sys.argv = ['acra.py', '0']
在 python 脚本中接收,所以我猜 cmd 的执行方式如下:
python acra.py 0
那么在这种情况下我该如何使用变量呢?
答案1
假设其gnome-terminal
行为如下xterm
:
gnome-terminal -e sh -c 'some commands here' sh "$variable1" "$variable2" "etc."
命令行末尾的字符串将在sh -c
脚本中以$1
、$2
、$3
等形式提供。脚本的第一个参数字符串将由shellsh
放置在错误消息中并在错误消息中使用。$0
在你的情况下:
#!/bin/sh
buildId="aa-bb-cc"
versionCode="123456"
daily="daily"
gnome-terminal -e sh -c '
while true; do
python acra.py "$1" "$2" 0 "$3"
sleep 600
done' sh "$versionCode" "$buildId" "$daily"
这假设该acra.py
脚本在当前工作目录中可用。
答案2
使用-x
选项而不是-e
选项,将修复错误。
为了方便错误检测,我在下面的示例中使用了echo
not 。python
buildId="aa-bb-cc"
versionCode="123456"
daily="daily"
gnome-terminal -e sh -c \
'echo "$1" "$2" 0 "$3"; sleep 60' \
sh "$versionCode" "$buildId" "$daily"
结果是:
Failed to parse arguments: Unknown option -c
buildId="aa-bb-cc"
versionCode="123456"
daily="daily"
gnome-terminal -x sh -c \
'echo "$1" "$2" 0 "$3"; sleep 60' \
sh "$versionCode" "$buildId" "$daily"
打开新的终端窗口,并在新窗口中打印此结果:123456 aa-bb-cc 0 daily
从
gnome-terminal
手册页:-e,--命令=字符串
在终端内执行此选项的参数。
-x, --执行
在终端内执行命令行的其余部分。
正确答案是善行难陀方法 :
#!/bin/sh
buildId="aa-bb-cc"
versionCode="123456"
daily="daily"
gnome-terminal -x sh -c '
while true; do
python acra.py "$1" "$2" 0 "$3"
sleep 600
done' sh "$versionCode" "$buildId" "$daily"
根据您的回答(恩霍克斯旁路) 例子 :
buildId="aa-bb-cc"
versionCode="123456"
daily="daily"
gnome-terminal -e "sh -c \"while true; do
python acra.py $versionCode $buildId 0 $daily
sleep 600 # 10 mins
done\""
或者
buildId="aa-bb-cc"
versionCode="123456"
daily="daily"
gnome-terminal -x sh -c "while true; do
python acra.py $versionCode $buildId 0 $daily
sleep 600 # 10 mins
done"