chmod 명령에 환경 변수를 사용할 수 없는 이유는 무엇입니까? [복사]

chmod 명령에 환경 변수를 사용할 수 없는 이유는 무엇입니까? [복사]

chmod 명령을 통해 환경 변수를 사용할 수 없습니다. 이것을 실행하는 해결 방법이 있습니까?

sh 파일에서 실행을 시도한 방식

export PEM_FILE="~/.ssh/xxx.pem"
chmod 400 $PEM_FILE

## Output
chmod: ~/.ssh/xxx.pem: No such file or directory

그러나 다음과 같은 변수 없이도 잘 작동합니다.chmod 400 ~/.ssh/xxx.pem

추신: 저는 macOS를 사용하고 있습니다. 이것이 Windows나 Linux에서 제대로 작동하는지 알려주세요.

감사해요!

답변1

불행하게도 이와 같은 특수 문자는 ~문자열에서 작동하지 않습니다. 대신 변수(예: $HOME홈 디렉터리 지정)를 사용하거나 따옴표를 제거하세요. (일부 쉘과의 호환성이 손상되므로 권장하지 않음)

따라서 다음과 같이 하십시오: 내보내기 PEM_FILE="$HOME/.ssh/xxx.pem" 또는 내보내기 PEM_FILE=~/.ssh/xxx.pem.

답변2

문제는 ~가 와일드카드이고 bash는 일반적으로 명령을 실행하기 전에 모든 와일드카드를 확장하고 변수 확장을 수행한다는 것입니다. 그러나 귀하의 경우에는 bash가 와일드카드 구문 분석을 수행하는 것을 방지하는 할당량을 사용하고 있으므로

PEM_FILE="~/.ssh/xxx.pem" 내보내기

PEM_FILE에는 파일 경로가 아닌 문자열이 포함됩니다. chmod 명령은 와일드카드를 구문 분석하지 않고 이 문자열을 인수로 받습니다.

그러니 할당량을 제거하세요.

export PEM_FILE=~/.ssh/xxx.pem

또는 전체 경로를 사용하십시오

export PEM_FILE="/home/username/.ssh/xxx.pem"

둘 다 작동합니다.

관련 정보