Bash:在新终端中执行命令WITH ARGUMENTS

时间:2017-04-05 18:46:13

标签: bash terminal command arguments quoting

所以我想在bash中打开一个新终端并执行带参数的命令。 只要我只使用类似ls之类的命令它就可以正常工作,但是当我使用类似route -n的东西时,所以带参数的命令,它都不起作用。 代码:

gnome-terminal --window-with-profile=Bash -e whoami #WORKS

gnome-terminal --window-with-profile=Bash -e route -n #DOESNT WORK

我已经尝试过把#34;"围绕命令和所有这一切,但它仍然无法正常工作

2 个答案:

答案 0 :(得分:0)

试试这个:

gnome-terminal --window-with-profile=Bash -e 'bash -c "route -n; read"'

最终read会阻止窗口在执行上一个命令后关闭。按键时会关闭。

如果您想体验头痛,可以试试更多的引用嵌套:

gnome-terminal --window-with-profile=Bash \
  -e 'bash -c "route -n; read -p '"'Press a key...'"'"'

(在以下示例中没有最终read。让我们假设我们在配置文件中修复了它。)

如果你想打印一个空行并享受多级逃逸:

gnome-terminal --window-with-profile=Bash \
  -e 'bash -c "printf \\\\n; route -n"'

同样,另一种引用风格:

gnome-terminal --window-with-profile=Bash \
  -e 'bash -c '\''printf "\n"; route -n'\'

变量用双引号扩展,而不是单引号,所以如果你想扩展变量,你需要确保最外面的引号是双引号:

command='printf "\n"; route -n'
gnome-terminal --window-with-profile=Bash \
  -e "bash -c '$command'"

引用可能变得非常复杂。如果你需要一些更高级的东西,只需要一些简单的命令,建议用你需要的所有可读的参数化代码编写一个独立的shell脚本,保存在某处,比如说/home/user/bin/mycommand,然后简单地将它作为< / p>

gnome-terminal --window-with-profile=Bash -e /home/user/bin/mycommand

答案 1 :(得分:0)

要启动一个新终端并在其中使用参数运行初始命令,请使用以下(注意:“-e”现已弃用;“ - ”用于启动命令)

gnome-terminal --window-with-profile=Bash -- \
    bash -c "<command>"

要使用正常的bash配置文件继续终端,请添加exec bash

gnome-terminal --window-with-profile=Bash -- \
    bash -c "<command>; exec bash"

exec在运行命令后替换shell,可以排除。

如果需要传递Here document之类的命令,请使用以下(此处使用xterm作为另一个示例)

cmd="$(printf '%s\n' 'wc -w <<-EOF
  First line of Here document.
  Second line.
  The output of this command will be '15'.
EOF' 'exec bash')"

xterm -e bash -c "${cmd}"

以下内容可用于脚本中,以参数作为命令打开新终端:

nohup xterm -e bash -c "$(printf '%s\nexec bash' "$*")" &>/dev/null &

当引用$*时,它会将参数扩展为单个单词,每个单词由IFS的第一个字符分隔。 nohup&>/dev/null &仅用于允许终端在后台运行。