Вы всегда можете передать свои команды в качестве аргументов для 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 * без проблем. Однако другие примеры должны работать с любым средством запуска, которое позволяет задавать аргументы для программы, и поведение по-прежнему зависит от многих вещей, и, по крайней мере, вы можете проверить, что любые специальные символы раскрываются в нужное время.
Я не проверял это и не могу сделать это сейчас, потому что отвечаю с моего телефона, но это должно работать нормально. Сейчас проверено, и я могу подтвердить, что это работает хорошо