bash 권한 - 알 수 없는 문제

bash 권한 - 알 수 없는 문제

이상하게도 스크립트 내부의 디렉터리에 다음과 같은 문제가 있습니다.

#!/usr/bin/env bash
MAIN_DIR=/home/ec2-user/dir/
LAST_DIR=$(ls -d -t ${MAIN_DIR}*/ | head -1)

내가 그것을 실행하면 나는 얻는다 :

ls: cannot access /home/ec2-user/bitcoin/*/: No such file or directory

터미널에서 실행하면 모든 것이 정상입니다.

그리고 프론트엔드 문제일지도 모른다고 생각해서 chmod 777 -r디렉토리로 뭔가를 했지만 여전히 결과가 없습니다. 그것을 고치는 방법에 대한 아이디어가 있습니까?

노트

이는 Amazon EC2 인스턴스에 있습니다.

답변1

후행 슬래시로 인해 패턴이 /home/ec2-user/bitcoin/*/디렉터리의 하위 디렉터리 목록으로 확장됩니다. /home/ec2-user/bitcoin(이름이 a로 시작하는 디렉터리는 제외됩니다 ..) /home/ec2-user/bitcoin하위 디렉터리가 없으면 패턴이 일치하지 않으므로 변경되지 않습니다.


chmod 777해설자: 무슨 일이 일어나고 있는지 이해하지 못한다고 해서 도망가지 마세요 . 이렇게 하면 문제가 거의 해결되지 않지만 많은 문제가 발생할 수 있습니다. 마치 "창문이 어디에 있는지 알 수 없어서 벽에 구멍을 뚫겠다"고 말하는 것과 같습니다.

답변2

문제의 일부는 변수를 정의하는 방식이라고 생각합니다. 다음을 작성하는 대신:

MAIN_DIR=/home/ec2-user/dir/
LAST_DIR=$(ls -d -t ${MAIN_DIR}*/ | head -1)

다음과 같이 후행을 생략 /하고 MAIN_DIR필요할 때 사용하는 것이 좋습니다.

MAIN_DIR=/home/ec2-user/dir
LAST_DIR=$(ls -d -t ${MAIN_DIR}/*/ | head -1)

나는 이것이 무슨 일이 일어나고 있는지 결정하는 데 도움이 될 것이라고 생각합니다. 내부 내용을 보지 않고는 dirbitcoin구체적인 추천을 드릴 수 없습니다.

스타일의 문제로, 값에 예상치 못한 공백이 코드를 손상시키지 않도록 변수(및 해당 값)를 인용하는 것이 좋습니다.

MAIN_DIR='/home/ec2-user/dir'
LAST_DIR=$(ls -d -t "${MAIN_DIR}"/*/ | head -1)

관련 정보