bash 스크립트에서 현재 디렉터리의 일부 파일을 복사하려고 하는데 문제는 해당 cp
명령이 현재 디렉터리에서 작동하지 않는다는 것입니다. Backtrack 5(Ubuntu 기반)에서는 문제 없이 다음 명령을 사용할 수 있지만 Kali Linux(Debian 기반)에서는 사용할 수 없습니다.
cp -f -v *.{html,txt,php} /var/www/
먼저 디렉터리를 해당 파일이 있는 디렉터리로 변경하여 터미널에서 직접 이 명령을 실행할 수 있습니다. 하지만 스크립트를 사용할 때 다음 오류가 발생합니다.
cp -f -v *.{html,txt,php} /var/www/
cp: cannot stat `*.{html,txt,php}': No such file or directory
Ubuntu를 사용할 때 스크립트에서 이 명령을 다시 사용하는 데 문제가 없습니다.
답변1
중괄호 /bin/sh
목록을 확장하는 시스템에서는 Bourne Again 쉘을 로 사용합니다 /bin/sh
. 중괄호를 일반(메타가 아닌) 문자로 처리하고 와일드카드가 일치하지 않는다고 불평하는 시스템에서는 Debian The Almquist 쉘을 사용합니다. /bin/sh
대화형 로그인 셸은 /bin/bash
두 시스템 모두에서 거의 확실합니다 .
스크립트에서 POSIX 쉘 언어에 대한 이러한 확장을 사용하려면 스크립트 해석기를 이를 지원하는 쉘의 실제 이름으로 설정해야 합니다. 반대로, /bin/sh
다른 시스템에서 스크립트 해석기로 사용하는 경우 POSIX 호환 셸 구문을 엄격히 준수해야 합니다.
추가 읽기
- https://superuser.com/a/696310/38062
- 대시는
/bin/sh
. 우분투 위키. - 대시는
/bin/sh
. 데비안 위키. - 바시즘. 그렉의 위키.
- "말의 확장". 쉘 명령 언어. IEEE 표준 1003.1. 이슈 7. 그룹을 엽니다.
답변2
cannot stat `*.{html,txt,php}'
상태의 오류 메시지는 다음과 같습니다 cp
.
- 일치하는 파일이 없거나
- 사용 중인 쉘은 중괄호 확장을 수행하지 않습니다.
명령이 실패한 시스템에서 어떤 쉘을 사용하고 있습니까? bash 대신 sh 또는 dash라면 이는 여러분이 보고 있는 내용을 설명할 것입니다. *.html *.txt *.php
중괄호 패턴 대신 명령을 내려볼 수 있습니다 .