【问题标题】:How to open a 2nd terminal from 1st one and run command in it? (without it being child process)如何从第一个终端打开第二个终端并在其中运行命令? (没有它是子进程)
【发布时间】:2019-12-16 10:13:25
【问题描述】:

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

这是改变我的桌面壁纸的终端命令:

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

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

pi@raspberrypi:~ $ lxterminal &

它会打开一个新的终端窗口,该窗口保持打开状态,并且不是子进程,对吧?在第二个终端中,我的更改壁纸命令有效。以下命令不起作用,如果我在 gnome-terminal 旁边放一个“&”,它会打开一个新终端,但不会执行 -e 指定的命令并给我一个错误。

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

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

【问题讨论】:

    标签: python linux shell terminal


    【解决方案1】:

    我知道你是新人,所以我想先向你介绍一些概念,然后才能回答你的问题。

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

    现在,您使用 gnome-terminal 所做的事情有点复杂。 gnome-terminal 正在 GNOME 环境中执行一个 bash 终端(它为您在其中运行的每个进程都有一个 shell)。 -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
    

    应该更换壁纸。但是,要完全回答这个问题,只需将 & 放在您希望在后台发送的任何命令之后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      • 1970-01-01
      • 2013-08-30
      • 1970-01-01
      • 2016-02-14
      相关资源
      最近更新 更多