【问题标题】:Open gnome-terminal from shell script and hold window open从 shell 脚本打开 gnome-terminal 并保持窗口打开
【发布时间】:2015-10-22 15:47:31
【问题描述】:

我正在尝试编写一个脚本,通过将我要打开的项目(目录)的名称作为参数来设置我的编程环境

例如:./my_script.sh sample_app

这是目前为止的脚本:

#!/bin/bash

wmctrl -s 0
sublime &
sleep 2

wmctrl -s 1
google-chrome &
sleep 2

wmctrl -s 2
Dir="$echo /home/biTNumb/Projects/ruby/workspace/$1"
echo $Dir
gnome-terminal --window-with-profile=Guard -e ls &
#gnome-terminal -e cd /home/biTNumb/Projects/ruby/workspace/$1 && bundle exec guard &
#gnome-terminal -e cd /home/biTNumb/Projects/ruby/workspace/$1 && rails s &

脚本执行时出现问题:

gnome-terminal --window-with-profile=Guard -e ls &

我收到消息The child process exited normally with status 0.

之后我无法使用终端(我只能关闭它)并且消息隐藏了部分输出。然而,我已经创建了一个配置文件并将 When command exits 下拉菜单设置为 'Hold the terminal open'...

** 我将 cmets 留在了脚本中,以便您了解我正在尝试做什么

【问题讨论】:

  • 与主要问题无关,但这个Dir="$echo /home/biTNumb/Projects/ruby/workspace/$1" 一点也不正确,虽然不会伤害你,因为$echo 变量没有价值。如果是这样,那么$Dir 的设置将不正确。从该作业中删除 $echo 。使用时还要引用"$Dir"
  • 你希望ls 的执行做什么?显示ls 的输出并留下一个死窗?您在Guard 配置文件中设置了该设置?
  • @EtanReisner 我观察到,如果不使用“echo”,我就不能使用带有名称的特殊字符“*”作为快捷方式
  • 那个字符串中的$echo 没有做nothingecho 命令导致 shell 在未引用的 $Dir 变量中展开一个 glob。但这很糟糕(总的来说)。试试printf '[%s]\n' "$Dir"$echo 看看我的意思(比较printf '[%s]\n' $Dir 看看不引用的作用)。
  • @EtanReisner 我需要脚本来打开一个新的终端,在其中运行 ls 然后保持打开状态并准备好使用!!我明白你所说的“$echo”是什么意思

标签: linux bash shell gnome-terminal


【解决方案1】:

要在同一个 gnome-terminal 窗口中执行多个命令,请使用分号 ; 作为分隔符,如下所示:

gnome-terminal -- bash -c "command 1; command 2; ...; bash;"

最后一个命令bash 启动命令行解释器,这样终端就不会在最后退出(使用$shell 而不是bash 以获得更通用的解决方案)。

这样您就不需要在命令退出时使用选项保持终端打开定义配置文件,并且您不会收到消息The child process exited with status 0(隐藏了输出的某些部分)。

这是你可能写的(我使用反斜杠\ 来分割行):

gnome-terminal -- bash -c \
" ls ;\
cd /home/biTNumb/Projects/ruby/workspace/$1 && bundle exec guard ;\
cd /home/biTNumb/Projects/ruby/workspace/$1 && rails s;\
$bash;"    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 2013-05-20
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多