如何将变量传递给 gnome-terminal 命令

如何将变量传递给 gnome-terminal 命令

我正在尝试使用变量来构造--commandarg 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选项,将修复错误。

为了方便错误检测,我在下面的示例中使用了echonot 。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"

相关内容