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"
둘 다 작동합니다.