Estoy ejecutando este script zsh pero aparece el siguiente mensaje de error:
./executable: unrecognized modifier `P'
El código del script es el siguiente:
#!/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}
Entiendo que este error tiene que ver con la asignación de foobar, pero no puedo encontrar ningún lugar P
para dónde se usa ni por qué es útil. ¿Algunas ideas?
Respuesta1
Posiblemente intente reemplazar con
foobar=$(readlink -f ${argv[1]})
Eso sólo funcionará si el archivo existe, lo cual :P no requiere.
Respuesta2
El:P
modificador fue agregado en Zsh.versión 5.3y, por lo tanto, no estará disponible en versiones anteriores. Un enfoque similar, aunque no exactamente idéntico, seríausa el :A
modificador en su lugar.
De zshexpn(1)
:
Modificador:a
Convierta el nombre de un archivo en una ruta absoluta: antepone el directorio actual, si es necesario; eliminar '.' segmentos de camino; y elimine los segmentos de ruta '..' y los segmentos que los preceden inmediatamente.
Modificador:A
Convierta un nombre de archivo en una ruta absoluta como lo hace el modificador 'a' y luego pase el resultado a través de la función de biblioteca realpath(3) para resolver enlaces simbólicos.
Nota: en sistemas que no tienen una función de biblioteca realpath(3), los enlaces simbólicos no se resuelven, por lo que en esos sistemas 'a' y 'A' son equivalentes.
Nota: foo:A y realpath(foo) son diferentes en algunas entradas. Para conocer la semántica de realpath(foo), consulte el
P
modificador.
Modificador:P
Convierta el nombre de un archivo en una ruta absoluta, como realpath(3). La ruta resultante será absoluta, no tendrá ni '.' ni los componentes '..', y hacen referencia a la misma entrada de directorio que el nombre del archivo de entrada.
A diferencia de realpath(3), se permiten y conservan los componentes finales inexistentes.
Omití algunos de los detalles más superfluos, así que asegúrese de consultar la página de manual; la sección "Expansión del historial", subsección "Modificadores".