3

Как я могу запустить три команды в лаунчере? Команды:

cd /home/seraex/MyDoc
rm MyDoc.tgz
tar cfz MyDoc.tgz *

перейдите в папку «Мои документы», удалите старую резервную копию и сделайте новую резервную копию.

Я сделал скрипт sh с этими командами и заставил запускать скрипт. Это работает, но я хочу, чтобы лаунчер запускал команды напрямую. Я использую Ubuntu 10.10

Сайт Ubuntu говорит

К сожалению, средства запуска не имеют доступа к среде Bash, поэтому вы не можете просто включить несколько команд

1 ответ1

1

Вы всегда можете передать свои команды в качестве аргументов для bash .

Некоторые рабочие примеры:

bash -c "rm -fR /some/dir/to_delete; mkdir /hello; touch /hello/foo.bar"

Это должно сработать, чтобы удалить /some/dir to delete затем создать dir /hello и записать baz в файл /hello/foo.bar:

bash -c 'rm -fR "/some/dir to delete"; mkdir "/hello"; echo "baz" > "/hello/foo.bar"'

Они не будут работать правильно:

Будьте осторожны с цитатами, это будет ломать вещи , как из - за цитирование команды ошибки будет rm -fR "/some/dir/to и все после этого игнорируется (или , чтобы быть более точным delete"; mkdir /hello" , если $0 используется внутри команды):

bash -c "rm -fR "/some/dir/to delete"; mkdir /hello"
        ^-------^            ^
       quoted part          unquoted whitespace here

И здесь еще одна вещь, чтобы упомянуть. Если вы хотите, чтобы ~ расширился как домашний каталог, и ваш путь к файлу может содержать пробелы, которые нужно заключить в кавычки, это не сработает. Файл ~/hello world.tmp не создается в нужном месте, но вместо этого он пытается найти каталог с именем ~ из текущего рабочего каталога, каким бы он ни был, и создать файл здесь, однако ~/level2.ls создается в домашнем каталоге :

bash -c 'echo "Hello World" > "~/hello world.tmp"; cd /; ls * > ~/level2.ls;'
                               ^
                              fully quoted filename prevents ~ from expanding

Вместо этого вы должны использовать кавычки, как это, чтобы позволить ~ расширение:

bash -c 'echo "Hello World" > ~/"hello world.tmp"; cd /; ls * > ~/level2.ls;'
                              ^
                             now ~ is not quoted at all

Вот строка для вашего случая:

Строгое цитирование ' необходимо для специального символа * , если его не экранировать, оно развернется слишком рано.

bash -c 'cd "/home/seraex/MyDoc"; rm -f MyDoc.tgz; tar -czf MyDoc.tgz *'

ИЛИ, если вы хотите использовать более общий ~ в качестве домашнего каталога, используйте это:

bash -c 'cd ~/"MyDoc"; rm -f MyDoc.tgz; tar -czf MyDoc.tgz *'

Итак, это только один из возможных способов сделать то, что вам нужно, он может работать или не работать напрямую (без bash -c и внешних кавычек). По крайней мере, с KDE 4 Launcher он будет обрабатывать команду cd ~/"MyDoc"; rm -f MyDoc.tgz; tar -czf MyDoc.tgz * без проблем. Однако другие примеры должны работать с любым средством запуска, которое позволяет задавать аргументы для программы, и поведение по-прежнему зависит от многих вещей, и, по крайней мере, вы можете проверить, что любые специальные символы раскрываются в нужное время.

Я не проверял это и не могу сделать это сейчас, потому что отвечаю с моего телефона, но это должно работать нормально. Сейчас проверено, и я могу подтвердить, что это работает хорошо

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .