在gksu下执行一个命令后再执行另一个命令



我试图有一个桌面快捷方式,执行一个命令(没有脚本,我只是想知道这是可能的)。这个命令需要root权限,所以我在Ubuntu中使用gksu,在我输入我的密码并且它是正确的之后,我想要另一个命令运行一个文件。我有这样的命令:

xterm -e "gksu cp /opt/Popcorn-Time/backup/* /opt/Popcorn-Time; /opt/Popcorn-Time/Popcorn-Time"

但是Popcorn-Time没有等我输入我的密码(正确)就打开了。我想这样做没有一个单独的脚本,如果可能的话。我该怎么做呢?

编辑:啊!我知道现在发生了什么,你们都在帮助我让Popcorn-Time等待gksu完成,但是如果没有backup中的文件,Popcorn-Time将无法运行,而且这些文件有点重(总共7 MB),所以它们需要一秒钟才能完成传输,然后Popcorn-Time在文件复制时已经打开。是否有办法让Popcorn-Time等待cp命令完成?我还把上面的命令改成了现在的样子。

编辑#2:我现在说的一切都不相关,因为Popcorn-Time的问题不是我想的那样,我不需要复制文件,我只需要以root身份运行它就可以了。感谢所有试图帮助我的人。

谢谢。

如果您希望/opt/popcorntime/Popcorn-time命令等待第一个命令完成,您可以用&&分隔命令,以便第二个命令只在第一个命令成功完成时执行。这被称为复合命令。例如:

command1 && command2

对于gksu,为了仅使用单个密码输入来运行多个命令,您将需要:

gksu -- bash -c 'command1 && command2'

在你的例子中:

gnome-terminal -e gksu -- bash -c "cp /opt/popcorntime/backup/* /opt/popcorntime && /opt/popcorntime/Popcorn-Time"

(你可能需要调整报价以适应你的扩展需求)

可以以类似的方式使用操作符,以便仅在第一个命令失败时才执行第二个命令。例如:

command1 || command2

在控制台中,您可以这样做:

gksu cp /opt/popcorntime/backup/* /opt/popcorntime; /opt/popcorntime/Popcorn-Time

为了在.desktop文件中使用Exec,像这样包装它:

bash -e "gksu cp /opt/popcorntime/backup/* /opt/popcorntime; /opt/popcorntime/Popcorn-Time"

问题是gnome-terminal只看到gksu命令作为-e参数的值,而不是Popcorn-Time命令。

gnome-terminal分叉并立即返回,因此Popcorn-Time立即运行。

解决方案是引用整个命令字符串(两个命令),使它们(组合)成为-e的单个参数。

最新更新