如何在启动器中运行三个命令?这些命令是:
cd /home/seraex/MyDoc
rm MyDoc.tgz
tar cfz MyDoc.tgz *
转到我的文档文件夹,删除旧备份,然后进行新的备份。
我已经用这些命令创建了一个 sh 脚本,并让启动器运行该脚本。这有效,但我想让启动器直接运行命令。我使用的是 Ubuntu 10.10
Ubuntu 网站说
不幸的是启动器无法访问 Bash 环境,因此你不能只包含多个命令
答案1
您始终可以将命令作为参数传递bash
。
一些工作示例:
bash -c "rm -fR /some/dir/to_delete; mkdir /hello; touch /hello/foo.bar"
这应该可以删除/some/dir to delete
然后创建目录/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 启动器上,它可以cd ~/"MyDoc"; rm -f MyDoc.tgz; tar -czf MyDoc.tgz *
毫无问题地处理命令。但是其他示例应该适用于任何允许为程序指定参数的启动器,行为仍然取决于许多因素,至少您可能希望检查任何特殊字符是否在正确的时间扩展。
我还没有测试过这个,现在也不能这么做,因为我是用手机接听的,但它应该可以正常工作。经过测试,我可以确认它运行良好