所以我想在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;"围绕命令和所有这一切,但它仍然无法正常工作
答案 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 &
仅用于允许终端在后台运行。