크론 래퍼로 뭔가를 하려고 하는데, 내 크론은 다음과 같습니다.
* * * * * root /usr/bin/wrapper cd /tmp/ && ls
그러면 래퍼는 다음과 같습니다.
#!/bin/bash
"$@"
실행할 때 세미콜론이나 &&가 원하는 대로 작동하도록 할 수 없습니다.
[[email protected] ~/test]# pwd
/root/test
[[email protected] ~/test]# ls
test.sh
[[email protected] ~/test]# ./test.sh cd /tmp && ls
test.sh
따라서 이 경우에는 tmp로 들어간 다음 weapper 스크립트가 종료되고 내 cwd에서 ls를 실행합니다.
내가 얻는 명령 주위에 ''를 추가하면
[[email protected] ~/test]# ./test.sh 'cd /tmp && ls'
./test.sh: line 3: cd /tmp && ls: No such file or directory
"$@"는 실행 중인 명령에 작은따옴표를 추가하려고 하는 것 같습니다.
"$@" 앞에 있는 작은따옴표를 제거할 수 있다는 점을 지지하지만 그렇게 하고 싶지는 않습니다. 팁이 있나요? 아니면 bash로 해결할 수 있나요?
답변1
/usr/bin/wrapper cd /tmp/ && ls
로 구문 분석됩니다 (/usr/bin/wrapper cd /tmp/) && ls
. 매개변수를 올바르게 전달하더라도 wrapper
이를 이해하지 못하는 &&
것은 쉘 구조입니다. 이 래퍼 스크립트를 정확히 무엇에 사용하고 있는지는 모르겠지만, bash -c
문자열을 가져와 bash에게 쉘에 직접 입력하는 것처럼 평가하라고 지시하는 this 로 대체할 수 있을 것 같습니다.
* * * * * root bash -c "cd /tmp/ && ls"