modificador não reconhecido P no script zsh

0

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?

    
por foobar 02.02.2018 / 18:02

2 respostas

0

Possivelmente tente substituir por

foobar=$(readlink -f ${argv[1]})

Isso só funcionará se o arquivo existir, o que: P não exige.

    
por 02.02.2018 / 18:23
0

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".

    
por 03.04.2018 / 12:11

Tags