테스트를 만들려고하는데 논리는 다음과 같습니다.
If mkdir command is successfully executed perform the next actions
내가 가진 것은 다음과 같습니다.
FILEPATH=/home/Documents/projectDirectory
CREATE_DIRECTORY=mkdir $FILEPATH
테스트 명령:
if [ -e $FILEPATH ]; then
echo "${FILEPATH} exists.."
else
#Create the folder: Test it if is created , else exit gracefully.
if [ -e "${CREATE_COMMAND}" ]; then
echo "File created ${FILEPATH}"
else
echo "Error creating the filePath..exiting.."
error_exit "Error creating the filePath..exiting.."
fi
fi
답변1
왜 이렇게 하려는지 잘 모르겠지만 가능한 해결책은 다음과 같습니다.
FILEPATH=/home/Documents/projectDirectory
CREATE_DIRECTORY="mkdir $FILEPATH 2>/dev/null"
eval $CREATE_DIRECTORY
if [[ $? -eq 0 ]]; then
echo "Directory created"
else
echo "Directory already exists"
fi
그러면 폴더가 생성되고 오류 메시지가 표시되지 않고 /dev/null로 전달됩니다. 그런 다음 if 문에서 이전 명령의 상태를 확인하고 성공했는지(0) 알려줍니다.
답변2
현재 코드에는 다음과 같은 결함이 있습니다.
CREATE_DIRECTORY=mkdir $FILEPATH
:mkdir $FILEPATH
주위 에 따옴표가 없으므로CREATE_DIRECTORY
해당mkdir
값만 유지됩니다.$FILEPATH
분사의 주제입니다.- 이러한 확장의 첫 번째 토큰이 외부 명령인 경우
CREATE_DIRECTORY
결과 확장의 환경으로 변수를 내보낼 수 있습니다.$FILEPATH
[ -e "${CREATE_COMMAND}" ]
:CREATE_COMMAND
우리가 아는 한, 이 변수는 값이 없습니다. 글을 쓰고 싶으신 것 같아요CREATE_DIRECTORY
.- 성공 여부 를 테스트하지 않습니다
mkdir
.
또한 if
복합 명령을 사용하여 명령이 성공했는지 테스트할 수 있습니다.
if command; then
# Code to execute if command succeeded
else
# Code to execute if command failed
fi
따라서 코드는 다음과 같이 다시 작성할 수 있습니다.
FILEPATH=/home/Documents/projectDirectory
if [ -e "${FILEPATH}" ]; then
echo "${FILEPATH} exists..."
else
if mkdir "${FILEPATH}"; then
echo "File created ${FILEPATH}"
else
echo "Error creating the filePath..exiting.."
error_exit "Error creating the filePath..exiting.."
fi
fi
알아채다:
CREATE_DIRECTORY
이 변수는 필수가 아닙니다.[ -e "${CREATE_COMMAND}" ]
로 대체됩니다mkdir "${FILEPATH}"
.
답변3
왜 이걸 할 수 없는지 정말 이해가 안 돼요
dir='/home/Documents/projectDirectory'
if ! mkdir "$dir"; then
printf 'Something went wrong when trying to create "%s"\n' "$dir" >&2
exit 1
fi
printf '"%s" created, now doing other things...\n' "$dir"
mkdir
이미 존재하는 경우 $dir
호출이 실패합니다.
디렉터리가 존재하도록 허용하고 mkdir
생성이 실패한 경우에만 종료해야 하는 경우 위 호출 -p
에 추가 mkdir
하거나 디렉터리 존재에 대해 명시적인 테스트를 수행합니다.
dir='/home/Documents/projectDirectory'
if [ ! -d "$dir" ]; then
if ! mkdir "$dir"; then
printf 'Something went wrong when trying to create "%s"\n' "$dir" >&2
exit 1
fi
printf '"%s" created\n' "$dir"
fi
echo 'now doing other things...'
나는 그것이 디렉토리인지 -d
테스트하기 위해 여기서 테스트를 사용하고 있습니다 . $dir
나는 스크립트의 나머지 부분에서 이름이 단순한 것 이상이어야 한다고 생각했기 때문에 이렇게 했습니다.존재하다그러나 이는 실제 디렉토리를 나타냅니다.
명령을 변수에 저장하려고 하지 마십시오. 그렇게 해야 하는 경우는 거의 없습니다. 이는 타이핑 시간을 절약하는 좋은 방법이 아닙니다. 쉘 스크립트에서 무언가를 수행하기 위해 더 짧은 방법이 필요한 경우 이에 대한 쉘 함수를 작성하십시오.
또한 습관을 길러주세요.언제나변수 확장을 큰따옴표로 묶으십시오. 이렇게 하면 쉘 스크립트가 항상 공백이 포함된 파일 이름을 올바르게 처리하고 파일 이름 글로빙이 실수로 호출되지 않습니다.
관련된:
다른 것들:
CREATE_DIRECTORY=mkdir $FILEPATH
이는 해당 환경에서 명령으로 실행됩니다 $FILEPATH
. 디렉터리(존재하는 경우)이거나 적어도 명령이 아니기 CREATE_DIRECTORY=mkdir
때문에 실패합니다 .$FILEPATH
값에 공백이 있는 변수를 생성하려면 값을 인용하십시오.
선
if [ -e "${CREATE_COMMAND}" ]; then
~ 할 것이다아니요디렉터리를 만듭니다. in의 값이 $CREATE_COMMAND
파일 계층 구조의 이름과 일치하는지 테스트합니다.
그것이 무엇인지는 모르겠지만 아마도 간단하게 및/또는 유사한 의 약어일 것입니다 error_exit
. 그렇죠?echo
exit 1