우분투를 사용하고 있는데 설치하려고 합니다이것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
스크립트에서 할당을 변경하거나 실행하기 전에 수정할 수도 있습니다.