在gksu下完成另一个命令后执行一个命令

时间:2014-08-07 21:41:11

标签: bash gksudo

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

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

但爆米花时间打开没有它等我完成输入密码(正确)。如果可能的话,我想在没有单独脚本的情况下这样做。 我该怎么做?

编辑:啊!我看到现在发生了什么,你们一直在帮助我让Popcorn-Time等待gksu完成,但是爆米花时间不会在没有backup的情况下运行{1}},那些有点重(总共7 MB),所以它们需要一秒钟才能完成传输,然后在文件复制时Popcorn-Time已经打开。有没有办法等待Popcorn-Time等待cp命令完成? 我也将上面的命令改为现在的状态。

编辑#2:我现在说的所有内容都不相关,因为Popcorn-Time的问题不是我想的,我不需要复制文件,我只是需要以root身份运行它才能工作。感谢所有试图提供帮助的人。

感谢。

3 个答案:

答案 0 :(得分:1)

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

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

为了在Exec文件中将其用作.desktop,请将其包装为:

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

答案 1 :(得分:1)

如果希望/opt/popcorntime/Popcorn-time命令等到第一个命令完成,则可以将命令分隔&&,以便第二个命令仅在成功完成第一个命令时执行。这称为复合命令。 E.g:

command1 && command2

使用gksu以仅使用单个密码条目运行多个命令,您将需要:

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

在你的情况下:

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

(您可能需要调整报价以满足您的扩展需求)

您可以以类似的方式使用运算符,以便第二个命令仅在第一个命令失败时执行。 E.g:

command1 || command2

答案 2 :(得分:0)

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

gnome-terminal forks立即返回,因此Popcorn-Time立即运行。

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