따라서 명령줄에서 실행하면 다음 명령을 실행하지만 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