스크립트에 대한 도움이 필요하며 명령줄에서 실행되지만 스크립트 내에서는 실행되지 않습니다.

스크립트에 대한 도움이 필요하며 명령줄에서 실행되지만 스크립트 내에서는 실행되지 않습니다.

따라서 명령줄에서 실행하면 다음 명령을 실행하지만 bash 스크립트에 이 오류가 표시됩니다.

sudo -u $usr rm -rf "${htmldir}"/!("awstatsicons"|"awstats-icon"|"icon"|"roundcube"|"phpmyadmin"|"stats"|"htusers")

bash 스크립트에서 위 줄에 "shopt -s extglob"을 지정했습니다. 명령줄에 usr 및 htmldir 변수를 추가하고 "shopt -s extglob"을 설정하고 해당 줄을 정확하게 복사하면 예상대로 작동합니다. 하지만 스크립트에서 실행하면 다음 오류가 발생합니다.

syntax error near unexpected token `('

몇 가지 순열을 시도했지만 잘 작동하지 않았습니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변1

해석을 위해 쉘을 대화형으로 만들어야 합니다 history -p! 수치:

#!/bin/bash -i
eval $(history -p <your statement involving ! expansion>)

쉘 스크립트를 호출하기 전에 기록을 저장해야 합니다.

history -a

예:

cat jt
#!/bin/bash -i
eval `history -p !df`

df /; history -a
./jt

답변2

좋아, 기본적으로 내 문제의 일부를 게시했습니다. 그러나 @alecxs가 옳습니다. 문제를 일으키는 숨겨진 문자 또는 "공백"이 있는 것이 있어야 합니다. 나는 들어가서 모든 "빈" 줄을 삭제하여 각 줄에서 마지막으로 보이는 문자 이후의 모든 항목이 삭제되었는지 확인했습니다. 그런 다음 스크립트를 실행하면 모든 것이 잘 작동합니다. 다시 한번 감사드립니다 @alecxs

관련 정보