如何从第一个终端打开第二个终端并在其中运行命令? (没有子进程)

时间:2019-08-08 16:26:42

标签: python linux shell terminal

我正在尝试使用python编写脚本,该脚本应更改我的树莓派上的桌面墙纸。我是python和linux的初学者,整天都被卡在这个问题上。很想听听你们<3

这是更改我的桌面墙纸的终端命令:

pcmanfm --set-wallpaper /usr/share/rpd-wallpaper/wallpaper.jpg

仅涉及linux终端语法:我想打开第二个终端并在其中运行命令,所有命令均从第一个终端启动。如果我在第一个终端输入:

pi@raspberrypi:~ $ lxterminal &

它打开一个新的终端窗口,该窗口保持打开状态,不是子进程吗?在此第二终端中,我的change wallpaper命令起作用。以下命令不起作用,如果我在gnome-terminal旁边放置“&”,它将打开一个新终端,但不执行-e指定的命令,并给我一个错误。

gnome-terminal -e  'bash -c \"pcmanfm --set-wallpaper /usr/share/rpd-wallpaper/wallpaper.jpg; exec bash\"'

如何用-e传递的命令打开新终端,该命令也不是子进程?

1 个答案:

答案 0 :(得分:0)

我知道您是新来的,所以在向您介绍问题之前,我想向您介绍一些概念。

shell / unix中的“&”运算符并不意味着要打开新的终端。它是一种操作员,可调用unix方便的小作业控制协议,该协议允许并行化复杂程序!这很棒。它使该命令成为后台进程,这基本上意味着它将启动一个新的外壳程序(或使用OP语言的“终端”),该外壳程序将运行该进程并让您控制当前的外壳程序(或终奌站)。您仍然控制着的外壳称为前景过程

现在,您使用gnome-terminal进行的操作要复杂一些。 gnome-terminal在GNOME环境中执行一个bash终端(该终端具有在其中运行的每个进程的外壳)。 -e是您要发送到此终端的命令。因此,如果要在后台发送“&”号,则将其放在该命令的末尾。

现在,让我们看一下您要运行的命令:

gnome-terminal -e  'bash -c \"pcmanfm --set-wallpaper /usr/share/rpd-wallpaper/wallpaper.jpg; exec bash\"'

-e表示要在新终端中运行的命令。 bash-c(命令)正在更改您的墙纸。好的。如果我不得不猜测,exec bash可能会引发任何奇怪的错误。但是那条线根本不执行任何操作。

在我看来,您真的不需要将任何内容发送到后台。

gnome-terminal -e  'bash -c \"pcmanfm --set-wallpaper /usr/share/rpd-wallpaper/wallpaper.jpg

应更改墙纸。但是,要完全回答问题,只需在您要发送的命令后面加上&AFTER。