繁体   English   中英

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

[英]How to open a 2nd terminal from 1st one and run command in it? (without it being child process)

我试图用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传递的命令(也不是子进程)打开新终端?

我知道您是新手,因此在向您提出问题之前,我想向您介绍一些概念。

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

现在,您对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放置在您希望发送的任何命令的背景中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM