Intereting Posts

Используя ; или && с помощью $ @

Я пытаюсь сделать что-то с оберткой cron, и мой cron выглядит примерно так

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

Тогда обертка выглядит

 #!/bin/bash "$@" 

Когда я запускаю его, я не могу заставить полуколону или && работать, как я надеюсь.

 [root@domain.net ~/test]# pwd /root/test [root@domain.net ~/test]# ls test.sh [root@domain.net ~/test]# ./test.sh cd /tmp && ls test.sh 

Таким образом, в этом случае он переходит в tmp, тогда скрипт отряда выходит .. и он запускает ls в моем cwd.

Если я добавлю «вокруг команды, которую я получаю

 [root@domain.net ~/test]# ./test.sh 'cd /tmp && ls' ./test.sh: line 3: cd /tmp && ls: No such file or directory 

Я предполагаю, что с помощью «$ @» он пытается добавить в одиночную кавычку к выполняемой команде

Я поддерживаю, что могу выделить одиночные кавычки до «$ @», но я надеялся не делать этого .. какие-либо советы или это даже разрешимо в bash?

/usr/bin/wrapper cd /tmp/ && ls анализируется как (/usr/bin/wrapper cd /tmp/) && ls . Даже если вам удастся правильно передать аргументы wrapper , они не понимают их; && – конструкция оболочки. Я не уверен, что именно вы нацелились на этот скрипт-оболочку, но я подозреваю, что вы можете просто заменить его bash -c , который берет строку и говорит bash, чтобы оценить ее, как если бы вы набрали ее непосредственно в оболочку :

 * * * * * root bash -c "cd /tmp/ && ls"