2011-06-02 89 views
12

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

gnome-terminal -x "cd Dropbox; program_name" 

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

+0

,使程序在后台运行,可以使用与&命令。所以$ ProgramThatTakesALongTime& ...但是,不会显示你从该程序输出... – Nate 2011-06-02 18:31:57

+1

@Nate是的,你可以看到程序在后台运行的输出。尝试'eval'睡眠3;回声“你好”'&' – 2013-02-08 16:53:48

回答

8

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

为什么不只是使用&发送到后台。你可以看到,如果它仍与jobs运行并与fg将其带回前台,您还可以发送回的背景下,通过先用按Ctrl + ž然后bg

实例停止它尝试。

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

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

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

尝试增加“&”你的命令的末尾,例如:

gnome-terminal & 

我不知道,如果它的工作与GNOME终端,但它与mrxvt运作良好。

1

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

0
/bin/bash -c "/path/to/prog" 

但也看看sleep命令也。

8

尝试:

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