$@와 함께 ; 또는 &&를 사용하세요.

$@와 함께 ; 또는 &&를 사용하세요.

크론 래퍼로 뭔가를 하려고 하는데, 내 크론은 다음과 같습니다.

* * * * * 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"

관련 정보