x,y,z를 포함하지 않는 파일을 복사하면 쉘 스크립트에서 오류가 발생합니다.

x,y,z를 포함하지 않는 파일을 복사하면 쉘 스크립트에서 오류가 발생합니다.

저는 쉘 스크립트에 대해 잘 알지 못하는데, 이것이 매우 간단한 수정이 될 것이라고 생각했지만, 혼란스럽습니다.

디렉터리의 내용(많은 파일 제외)을 복사해야 합니다. 터미널에 입력하면 작동하는 명령이 있는데, 쉘 스크립트에서 실행하면 구문 오류로 인해 실패하거나 전혀 작동하지 않습니다.

문제의 명령은 다음과 같습니다.

cp -r path/to/!(dir1|dir2|dir3) destination

어떤 도움이라도 대단히 감사하겠습니다!

답변1

이것이 ksh문법입니다. bash이 구문은 다음을 통해 옵션을 활성화한 경우에만 인식됩니다 .extglob

shopt -s extglob

따라서 해당 줄을 스크립트 시작 부분에 추가하거나 스크립트를 ksh바꾸 거나 호출하는 것으로 해석해야 합니다 (후자는 권장되지 않습니다. 스크립트에 의해 생성된 모든 bash 셸에 대해 옵션이 활성화되기 때문입니다).bashenv BASHOPTS=extglob your-scriptextglob

아마도 시스템에서 이 옵션을 활성화했을 것입니다 ~/.bashrc. 이것이 프롬프트에서 작동하는 이유입니다( ~/.bashrc비로그인 대화형 쉘에서만 읽을 수 있음).

관련 정보