Ubuntu를 사용하고 있으며 설치하려고 합니다.이것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/...
동등한 것으로 확장됩니다 . 즉, 및 다른 인수로 가져옵니다 . 두 번째는 대시로 시작하므로 그 안의 문자를 옵션으로 해석하려고 합니다. GNU cp는 옵션으로 사용할 수 없으므로 오류가 발생합니다.cp -Ri dirname -bash/...
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
물론 스크립트 내에서 할당을 변경하거나 실행하기 전에 수정할 수 있습니다.