Usando um; ou && com $ @

3

Estou tentando fazer algo com um wrapper do cron e meu cron parece com algo como

* * * * * root /usr/bin/wrapper cd /tmp/ && ls 

Em seguida, o wrapper parece

#!/bin/bash 

"$@"

Quando eu executo, não consigo o ponto-e-vírgula ou & & para trabalhar como eu estou esperando.

[[email protected] ~/test]# pwd
/root/test
[[email protected] ~/test]# ls
test.sh
[[email protected] ~/test]# ./test.sh cd /tmp && ls
test.sh

Então, nesse caso, ele vai para o tmp, então o script do weapper sai .. e ele executa ls no meu cwd.

Se eu adicionar "em torno do comando, obtenho

[[email protected] ~/test]# ./test.sh 'cd /tmp && ls'
./test.sh: line 3: cd /tmp && ls: No such file or directory

Eu estou supondo que com o "$ @" ele está tentando adicionar a aspa simples ao comando que está sendo executado

Eu apoio eu posso retirar as aspas simples antes do "$ @", mas eu estava esperando para não fazer isso .. alguma dica ou isso é mesmo solucionável no bash?

    
por Mike 30.01.2013 / 18:45

1 resposta

8

/usr/bin/wrapper cd /tmp/ && ls é analisado como (/usr/bin/wrapper cd /tmp/) && ls . Mesmo se você conseguir passar os argumentos para wrapper corretamente, não os entenderá; && é uma construção de shell. Eu não tenho certeza exatamente o que você estava querendo com este script wrapper, mas eu suspeito que você pode simplesmente substituí-lo com bash -c , que leva uma string e diz ao bash para avaliá-lo como se você tivesse digitado diretamente no shell :

* * * * * root bash -c "cd /tmp/ && ls"
    
por 30.01.2013 / 18:58