readlink를 사용하려고 할 때 "디렉토리입니다" 오류

readlink를 사용하려고 할 때 "디렉토리입니다" 오류

사용자 정의 PS1을 생성하려고 bash를 사용하고 있는데 현재 있는 디렉토리의 절대 경로를 인쇄하려고 하면 오류가 발생합니다. 나는 $FIRMWARE심볼릭 링크인 디렉토리를 가지고 있습니다 . PS1에서 해결된 심볼릭 링크를 표시하고 싶습니다. 추가 정보와 함께 다음 코드를 제거했습니다.

export FIRMWARE="/path/to/firmware"

firmware_link() {
    local A
    A="$(readlink ${FIRMWARE})"
    echo $A 
}

이 함수를 호출하면

> $(firmware_link)
bash: /path/to/firmware: Is a directory

나는 따라가려고 노력한다이 게시물하지만 견적 제안이 내 문제를 해결하지 못했습니다. 나는 이것이 형식 오류이거나 bash 작동 방식에 대한 근본적인 오해라고 생각합니다.

답변1

말함으로써 :

$(firmware_link)

프롬프트 에 bash. bash함수를 실행한 다음 함수의 출력을 쉘 명령으로 처리하도록 지시합니다 . 이 일반적인 기술을 명령 대체라고 하며, 예제 코드에서 발견한 오류를 생성합니다.

대신 간단히 함수를 호출해 보세요.

firmware_link

예상되는 출력은 다음과 같습니다.

/path/to/firmware

문제가 어떻게 발생하는지 확인하려면 bash 프롬프트에 디렉터리 이름을 수동으로 입력하세요.

/path/to/firmware
-bash: /path/to/firmware: Is a directory

코드를 조금 단순화하면 코드에서 오류를 더 쉽게 찾을 수 있습니다.

export FIRMWARE="/path/to/firmware"

firmware_link() {
    readlink "${FIRMWARE}"
}

이는 함수의 출력이 firmware_link유효한 명령이 아닌 디렉터리 이름이 된다는 점을 더욱 분명하게 만듭니다 bash.

관련 정보