从一个bash shell启动一个新的bash shell

19

我想从bash shell中运行一个程序。当程序运行时,它会占用整个shell,因此我想启动一个新的shell并从那里运行程序。目前我的做法是:

gnome-terminal -x "cd Dropbox; program_name"

但是这会给我报错:无法执行子进程,文件或目录不存在。我认为这是因为新终端没有时间进行初始化。我该如何解决?


你可以使用“&”命令,使程序在后台运行。因此,$ ProgramThatTakesALongTime &,但是这不会显示该程序的输出... - Nate
1
@Nate 是的,你可以看到在后台运行的程序的输出。尝试使用 eval 'sleep 3; echo "hello"' & - Sébastien
6个回答

11

尝试:

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

10
我承认这并没有真正回答你的问题,但我认为它解决了你的问题。
为什么不使用&将其发送到后台。您可以使用jobs查看它是否仍在运行,并使用fg将其带回前台,您还可以通过首先使用Ctrl+Z停止它,然后使用bg将其发送回后台。
尝试的例子。
> sleep 20 &
> jobs
> fg [jobNumber]
[Ctrl-Z]
> jobs
> bg [jobNumber]
> jobs

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

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

但也要了解一下sleep命令。


1

在调用gnome-terminal之前,请使用程序的绝对路径或cd命令。并且你需要一个&符号将其放到后台运行。

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

1
尝试在命令结尾处添加"&",例如:

gnome-terminal &

我不知道它是否与gnome-terminal兼容,但它在mrxvt上运行良好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接