Выполните одну команду за другой, заканчивая под gksu

Я пытаюсь использовать ярлык на рабочем столе, который выполняет одну команду (без сценария, мне просто интересно, возможно ли это). Эта команда требует прав суперпользователя, поэтому я использую gksu в Ubuntu после того, как я закончу вводить пароль и он верный, я хочу, чтобы другая команда запустила файл. У меня есть эта команда:

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

Но Popcorn-Time открывается без ожидания, пока я не закончу вводить свой пароль (правильно). Я хочу сделать это без отдельного сценария, если это возможно. Как мне это сделать?

РЕДАКТИРОВАТЬ: Ах! Я вижу, что происходит сейчас, вы все помогали мне заставить Попкорн-Тайм ждать gksu чтобы закончить, но Popcorn-Time не будет работать без файлов в backupи они немного тяжелые (всего 7 МБ), поэтому им требуется секунда, чтобы завершить передачу, затем Popcorn-Time уже открыт к моменту копирования файлов. Есть ли способ ждать попкорн-время, чтобы ждать cp Команда, чтобы закончить? Я также изменил мою команду выше, что у меня есть сейчас.

РЕДАКТИРОВАТЬ #2: Все, что я сейчас сказал, не имеет отношения к делу, так как проблема с Popcorn-Time не та, о которой я думал, мне не нужно было копировать файлы, мне просто нужно было запустить его как root для Работа. Спасибо всем, кто пытался помочь.

Благодарю.

3 ответа

В консоли вы бы сделали:

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"

Если вы хотите /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"

(возможно, вам придется изменить цитату в соответствии с вашими потребностями расширения)

Вы можете использовать оператор or аналогичным образом, чтобы вторая команда выполнялась только в случае сбоя первой. Например:

command1 || command2

Проблема в том, что gnome-терминал видит только gksu Команда в качестве значения для -e аргумент, а не Popcorn-Time команда.

гном-терминал разветвляется и возвращается сразу и так Popcorn-Time бежит сразу.

Решение состоит в том, чтобы заключить в кавычки всю командную строку (обе команды), чтобы они (объединялись) в один аргумент -e,

Другие вопросы по тегам