Estou brincando no bash para tentar criar um PS1 personalizado, mas estou correndo em um erro quando tento imprimir o caminho absoluto do diretório em que estou. Eu tenho um diretório $FIRMWARE
que é um link simbólico. Eu quero exibir o link simbólico resolvido no PS1. Eu tenho o seguinte código despojado de outras informações:
export FIRMWARE="/path/to/firmware"
firmware_link() {
local A
A="$(readlink ${FIRMWARE})"
echo $A
}
Se eu chamar essa função eu recebo
> $(firmware_link)
bash: /path/to/firmware: Is a directory
Tentei seguir este post, mas as recomendações de cotações não resolveram meu problema. Tenho a sensação de que isso é um erro de formatação ou um mal-entendido fundamental de como o bash funciona.
Ao dizer:
em um
bash
prompt. você está dizendobash
para executar sua função e, em seguida, processar a saída dessa função como um comando shell. Essa técnica geral é chamada de substituição de comando e, em seu código de exemplo, cria o erro que você observa.Em vez disso, tente simplesmente invocar a função:
A saída esperada seria:
Para ver como o problema está surgindo, insira manualmente esse nome de diretório em um prompt do bash:
Você pode identificar o erro em seu código mais facilmente se simplificar um pouco:
Isso torna mais aparente que a saída da função
firmware_link
será um nome de diretório, não umbash
comando válido.