사용자 정의 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
.