如何在启动器中写入多行

如何在启动器中写入多行

如何在启动器中运行三个命令?这些命令是:

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 *毫无问题地处理命令。但是其他示例应该适用于任何允许为程序指定参数的启动器,行为仍然取决于许多因素,至少您可能希望检查任何特殊字符是否在正确的时间扩展。

我还没有测试过这个,现在也不能这么做,因为我是用手机接听的,但它应该可以正常工作。经过测试,我可以确认它运行良好

相关内容