Possivelmente tente substituir por
foobar=$(readlink -f ${argv[1]})
Isso só funcionará se o arquivo existir, o que: P não exige.
Estou executando este script zsh, mas recebo a seguinte mensagem de erro:
./executable: unrecognized modifier 'P'
O código do script é o seguinte:
#!/bin/zsh
setopt no_unset err_exit pipe_fail
if [[ $# -lt 2 ]]; then
cat <<EOF
Usage: ${0:t} something1 something2 ..
EOF
exit 1
fi
foobar=${argv[1]:P}
Eu entendo que esse erro tem a ver com a atribuição do foobar, mas não consigo encontrar nenhum lugar para onde esse P
seja usado, nem por que ele é útil. Alguma idéia?
Possivelmente tente substituir por
foobar=$(readlink -f ${argv[1]})
Isso só funcionará se o arquivo existir, o que: P não exige.
O modificador :P
foi adicionado na versão Zsh 5.3 e, portanto, estará indisponível em versões mais antigas. Uma abordagem semelhante, mas não idêntica, seria usar o modificador :A
.
De zshexpn(1)
:
Modificador :a
Turn a file name into an absolute path: prepends the current directory, if necessary; remove '.' path segments; and remove '..' path segments and the segments that immediately precede them.
Modificador :A
Turn a file name into an absolute path as the 'a' modifier does, and then pass the result through the realpath(3) library function to resolve symbolic links.
Note: on systems that do not have a realpath(3) library function, symbolic links are not resolved, so on those systems 'a' and 'A' are equivalent.
Note: foo:A and realpath(foo) are different on some inputs. For realpath(foo) semantics, see the
P
modifier.
Modificador :P
Turn a file name into an absolute path, like realpath(3). The resulting path will be absolute, have neither '.' nor '..' components, and refer to the same directory entry as the input filename.
Unlike realpath(3), non-existent trailing components are permitted and preserved.
Eu omiti alguns dos detalhes mais irrelevantes, então, verifique a man page; a seção "Expansão da História", subseção "Modificadores".
Tags zsh