저는 쉘 스크립트에 대해 잘 알지 못하는데, 이것이 매우 간단한 수정이 될 것이라고 생각했지만, 혼란스럽습니다.
디렉터리의 내용(많은 파일 제외)을 복사해야 합니다. 터미널에 입력하면 작동하는 명령이 있는데, 쉘 스크립트에서 실행하면 구문 오류로 인해 실패하거나 전혀 작동하지 않습니다.
문제의 명령은 다음과 같습니다.
cp -r path/to/!(dir1|dir2|dir3) destination
어떤 도움이라도 대단히 감사하겠습니다!
답변1
이것이 ksh
문법입니다. bash
이 구문은 다음을 통해 옵션을 활성화한 경우에만 인식됩니다 .extglob
shopt -s extglob
따라서 해당 줄을 스크립트 시작 부분에 추가하거나 스크립트를 ksh
바꾸 거나 호출하는 것으로 해석해야 합니다 (후자는 권장되지 않습니다. 스크립트에 의해 생성된 모든 bash 셸에 대해 옵션이 활성화되기 때문입니다).bash
env BASHOPTS=extglob your-script
extglob
아마도 시스템에서 이 옵션을 활성화했을 것입니다 ~/.bashrc
. 이것이 프롬프트에서 작동하는 이유입니다( ~/.bashrc
비로그인 대화형 쉘에서만 읽을 수 있음).