Выполните одну команду за другой, заканчивая под 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
,