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