【问题标题】:Starting a new bash shell from a bash shell从 bash shell 启动新的 bash shell
【发布时间】:2011-09-07 07:16:48
【问题描述】:

我想从 bash shell 运行一个程序。当程序运行时,它控制着整个 shell,所以我想启动一个新的 shell 并从那里运行程序。目前我正在做:

gnome-terminal -x "cd Dropbox; program_name"

但是,这给了我错误无法执行子进程,没有这样的文件或目录。我相信那是因为新终端没有时间初始化。我怎样才能解决这个问题?

【问题讨论】:

  • 可以使用and&命令让程序在后台运行。所以 $ ProgramThatTakesALongTime & ...但这不会显示该程序的输出...
  • @Nate 是的,你可以看到后台运行的程序的输出。试试eval 'sleep 3; echo "hello"' &

标签: linux bash shell terminal


【解决方案1】:

试试:

bash -c 'gnome-terminal -x cd /absolute-path && program_name'

【讨论】:

    【解决方案2】:

    我承认这并不能真正回答你的问题,但我认为它可以解决你的问题。

    为什么不直接使用& 将其发送到后台。您可以使用jobs 查看它是否仍在运行,并使用fg 将其带回前台,您也可以将其发送回后台,首先使用 Ctrl+ 将其停止Z 然后bg

    尝试示例。

    > sleep 20 &
    > jobs
    > fg [jobNumber]
    [Ctrl-Z]
    > jobs
    > bg [jobNumber]
    > jobs
    

    【讨论】:

      【解决方案3】:

      试试screen。它是一个简单的 brogram,可让您同时跟踪多个 shell。您可以浏览每个打开的 shell,甚至可以离开会话并稍后重新连接。

      【讨论】:

        【解决方案4】:

        在调用 gnome-terminal 之前使用程序或 cd 的绝对路径。你需要一个 & 来把它放在后台。

        cd Dropbox; gnome-terminal -x "program_name" &
        

        【讨论】:

          【解决方案5】:

          尝试在命令末尾添加“&”,例如:

          gnome-terminal &
          

          我不知道它是否适用于 gnome-terminal,但它适用于 mrxvt。

          【讨论】:

            【解决方案6】:
            /bin/bash -c "/path/to/prog"
            

            但也请查看sleep 命令。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-06-22
              • 2015-04-16
              • 1970-01-01
              • 2016-06-14
              • 2020-11-10
              • 1970-01-01
              • 1970-01-01
              • 2018-02-23
              相关资源
              最近更新 更多