首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash将字符串传递给"gnome-terminal -e“

bash将字符串传递给"gnome-terminal -e“
EN

Stack Overflow用户
提问于 2015-08-29 01:27:14
回答 2查看 791关注 0票数 1

这个问题看起来像Opening multiple tabs in gnome terminal with complex commands from a cycle,但我正在寻找一个更通用的解决方案。

我有一个C程序,它用参数调用脚本"xvi“。每个参数最初都用引号(‘)括起来,并且参数中的每个引号都是独立的,并使用反斜杠(此格式是先决条件)例如:

代码语言:javascript
复制
xvi 'a file' 'let'\''s try another'

脚本xvi必须使用"-e vim args“启动gnome-terminal

代码语言:javascript
复制
exec /usr/bin/xterm -e /usr/bin/vim "$@"

对于gnome-terminal,"-e“是一个选项,我们需要将整个命令行”打包“在一个参数中。这就是我所做的,这是可以的:用双引号(\“arg\”)将每个参数括起来,并对参数中的任何双引号进行反斜杠:

代码语言:javascript
复制
cmd="/usr/bin/vim"
while [ "$1" != "" ] ; do
  arg=`echo "$1" | sed -e 's/\"/\\\"/g'`
  cmd="$cmd \"$arg\""
  shift
done
exec gnome-terminal --zoom=0.9 --disable-factory -e "$cmd"

再说一次,它工作得很好,我对此几乎是满意的。

问:有没有更好的解决方案,避免循环?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2015-08-29 01:37:33

未经测试,但您可能会骗过printf '%q'来做这项工作:

代码语言:javascript
复制
exec gnome-terminal --zoom=0.9 --disable-factory -e "$(printf '%q ' "$@")"
票数 0
EN

Stack Overflow用户

发布于 2017-06-20 21:49:40

我知道这个线程很旧,但最近我有类似的需求,我创建了一个bash脚本来启动多个选项卡,并在每个选项卡上运行不同的命令:

代码语言:javascript
复制
#!/bin/bash

# Array of commands to run in different tabs
commands=(
    'tail -f /var/log/apache2/access.log'
    'tail -f /var/log/apache2/error.log'
    'tail -f /usr/local/var/postgres/server.log'
)

# Build final command with all the tabs to launch
set finalCommand=""
for (( i = 0; i < ${#commands[@]}; i++ )); do
    export finalCommand+="--tab -e 'bash -c \"${commands[$i]}\"' "
done

# Run the final command
eval "gnome-terminal "$finalCommand

您只需在数组中添加命令并执行即可。

要点链接:https://gist.github.com/rollbackpt/b4e17e2f4c23471973e122a50d591602

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32276623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档