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

2024-04-29 09:27:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用python编写一个脚本,它可以改变我的raspberry pi上的桌面墙纸。我是python和linux的初学者,整天都在研究这个问题。很想听听你们的意见<;三

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

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

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

pi@raspberrypi:~ $ lxterminal &

它会打开一个新的终端窗口,该窗口保持打开状态,并且不是一个子进程,对吗?在这个第二终端我的改变墙纸命令工作。以下命令不起作用,如果我在在gnome终端旁边,它打开了一个新的终端,但是没有执行用-e指定的命令,并给出了一个错误

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

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


Tags: 命令bash终端share进程linuxusrpi
1条回答
网友
1楼 · 发布于 2024-04-29 09:27:55

我知道你是新来的,所以在回答你的问题之前,我想先向你介绍一些概念

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

现在,关于gnome终端的事情要复杂一点。gnome终端在gnome环境中执行bash终端(在它内部运行的每个进程都有一个shell)-e是要发送到此终端的命令。所以,你把符号(&;)如果这是您希望发送到后台的命令,则在该命令的末尾

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

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

-e表示要在新终端中运行的命令。bash-c(commmand)正在更改您的墙纸。好的,酷。execbash可能是任何奇怪的错误抛出,如果我不得不猜测。但那条线根本不起作用

在我看来,你其实不需要在后台发送任何东西

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

应该换一下你的墙纸。但是,要完整地回答这个问题,只需将;在你想在后台发送的命令之后

相关问题 更多 >