Como escrever mais de uma linha em um lançador

3

Como posso executar três comandos em um lançador? Os comandos são:

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

que vão para a pasta de documentos, excluem o backup antigo e fazem um novo backup.

Eu fiz um script sh com esses comandos e fiz o launcher executar o script. Isso funciona, mas eu quero fazer o lançador executar os comandos diretamente. Estou usando o Ubuntu 10.10

O site do Ubuntu diz

Unfortunately launchers do not have access to the Bash environment so you cannot just include the multi commands

    
por seraex 25.06.2012 / 14:00

1 resposta

1

Você sempre pode passar seus comandos como argumentos para bash .

Alguns exemplos de trabalho:

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

Isso deve funcionar para excluir /some/dir to delete , em seguida, criar dir /hello e gravar baz no arquivo /hello/foo.bar :

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

Isso não funcionará corretamente:

Tenha cuidado com as aspas, isso quebrará as coisas porque o comando quoting error será rm -fR "/some/dir/to e tudo o mais será ignorado ( ou para ser mais preciso delete"; mkdir /hello" será expandido se $0 for usado dentro do comando ):

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

E aqui está outra coisa para mencionar. Se você quiser que ~ se expanda como diretório pessoal e o caminho do seu arquivo possa conter espaços em branco precisam ser citados , isso não funcionará. O arquivo ~/hello world.tmp não é criado no lugar certo, mas tenta encontrar o diretório denominado ~ do diretório de trabalho atual qualquer que seja e criar o arquivo aqui, entretanto ~/level2.ls é criado no diretório home:

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

Em vez disso, você deve usar aspas desse modo para permitir ~ expandindo:

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

Aqui está a linha para o seu caso:

A strong citação de ' é necessária para o caractere especial * , se não for ignorado, expandirá muito cedo.

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

OU se você quiser usar mais geral ~ como home dir, use isso:

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

Portanto, esta é apenas uma maneira possível de fazer o que você precisa, pode ou não funcionar diretamente também (sem bash -c e aspas exteriores). Pelo menos com o launcher do KDE 4, ele irá lidar com o comando cd ~/"MyDoc"; rm -f MyDoc.tgz; tar -czf MyDoc.tgz * sem nenhum problema. No entanto, outros exemplos devem funcionar com qualquer ativador que permita especificar argumentos para o programa e o comportamento ainda depende de muitas coisas e, pelo menos, você pode querer verificar se quaisquer caracteres especiais são expandidos no momento certo.

Eu não testei isso e não posso fazer isso agora porque respondi com meu telefone, mas ele deve funcionar bem. Agora testei e posso confirmar que funciona bem

    
por 25.06.2012 / 21:55

Tags