cp: 잘못된 옵션 -- 'h'

cp: 잘못된 옵션 -- 'h'

우분투를 사용하고 있는데 설치하려고 합니다이것Anaconda를 통한 Python 패키지. 나는 링크에 있는 단계를 따랐고, 입력하면 cp -Ri $THIS_DIR/PackageFiles/Scripts $CMDIR(59번째 줄부터) 다음과 같은 결과를 얻습니다.

cp: invalid option -- 'h'

이유는 무엇이며 어떻게 해결할 수 있나요?

echo $THIS_DIR편집: 및 의 출력은 각각 및 echo $CMDIR입니다 .dirname -bash/home/myusername/cellmodeller

답변1

몇 가지 사항: THIS_DIR포함하는 dirname -bash경우 (단어 분할로 인해) cp -Ri $THIS_DIR/...와 동등한 것으로 확장됩니다. cp -Ri dirname -bash/...즉, 및 를 별개의 인수로 cp가져옵니다 . 두 번째 것은 대시로 시작하므로 그 안의 문자를 옵션으로 해석하려고 합니다. GNU cp 에는 옵션이 없으므로 오류가 발생합니다.dirname-bash/...-h

dirname -bash따옴표로 분할을 방지할 수 있지만 공백 등으로 호출되는 디렉토리가 없기 때문에 별 의미가 없습니다 .

스크립트를 보면 다음 THIS_DIR을 통해 설정됩니다.

THIS_DIR="`dirname $0`"

백틱에 주목하세요. 명령 대체를 시작하고 dirname명령을 실행합니다. 제거하면 리터럴 문자열이 dirname ...할당됩니다.

그런 다음 다시 $0실행 중인 셸이나 스크립트의 이름입니다. 스크립트는 아마도 해당 명령을 사용하여 스크립트 자체가 있는 위치(예: /foo/bar를 실행한 경우 경로)를 알아냅니다 /foo/bar/scriptname.sh. 그러나 일반적으로 실행되는 대화형 셸에서는 $0아마도 을 포함 bash하거나 -bash로그인 셸인 경우일 것입니다.

의견에서 cutrightjm이 말했듯이 해당 스크립트는 터미널에 개별적으로 복사된 명령이 아니라 스크립트로 실행되도록 되어 있습니다. (확장 주위에는 여전히 따옴표를 사용할 수 있습니다.)

물론 THIS_DIR스크립트에서 할당을 변경하거나 실행하기 전에 수정할 수도 있습니다.

관련 정보