52 votos

carácter de comentario zsh

Muchos bash scripts invocan la función # para indicar un comentario. Catalina migró a zsh. El comando:

# Comments should elicit no response

devuelve

zsh: comando no encontrado: #

Encuentro ejemplos de comandos útiles en la web: es útil anotar los comandos con dicho #weblink para que quede registrado en el historial.

Encontré este post: https://stackoverflow.com/a/11873793/4953146

  1. ¿Hay alguna razón para # no ser reconocido como el carácter de comentario en zsh?
  2. ¿Cómo se puede configurar el terminal para que reconozca el carácter como un comentario?

La pregunta 1 establece el contexto para decidir un método para abordar la pregunta 2. Estaría bien poder configurar el carácter una vez y que todas las futuras instancias de zsh lo siguieran. Si hay / había una buena razón por la que la función fue desactivada, me gustaría entender las razones.

Entender el "por qué" es importante para determinar el "cómo". Parece que hay muchas maneras de restaurar # comentando en zsh. Una solución duradera es añadir al archivo de configuración: sudo vi /etc/zshrc :

setopt interactivecomments

Otros métodos (no duraderos) incluyen invocar ksh o sh.

Muchas gracias a user3439894 & Allan por apoyar / avanzar la pregunta.

11voto

Douglas Puntos 10417

Esto se debe a cómo Bash/Zsh está configurado para manejar los caracteres de comentario en shells interactivos y no interactivos.

Normalmente, los caracteres de comentario no se reconocen por defecto en los shells interactivos, por lo que este comportamiento es normal.

Del manual de referencia de Bash, Capítulo 3.1.3 - Comentarios :

En un shell no interactivo, o en un shell interactivo en el que la opción interactive_comments del comando shopt builtin una palabra que empiece por '#' hace que esa palabra y todos los caracteres restantes de esa línea sean ignorados. Un intérprete de comandos interactivo sin la función interactive_comments activada no permite comentarios. La dirección interactive_comments está activada por defecto en los shells interactivos.

La diferencia entre los shells interactivos y los no interactivos es que en los primeros la entrada y salida se realiza a través del terminal del usuario, mientras que en los segundos los comandos son asíncronos (no hay interacción). Aunque estés en un shell interactivo, cuando inicias un script, se crea un subshell no interactivo.

Aunque me he referido a Bash en esta respuesta, Zsh es lo mismo. Capítulo 6.7 - Comentarios se lee casi igual:

En shells no interactivos, o en shells interactivos con la opción INTERACTIVE_COMMENTS activada, una palabra que empiece por el tercer carácter del carácter histchars ('#' por defecto) hace que se ignore esa palabra y todos los caracteres siguientes hasta una nueva línea.


Si hay / había una buena razón por la que la función fue desactivada, me gustaría entender las razones.

Dudo en utilizar la palabra "desactivado", ya que es simplemente una variable de entorno que configura el entorno de ejecución; simplemente "no está activada" por defecto. No hay documentación sobre el razonamiento por el que Apple (en última instancia) optó por establecerlo.

Puedo confirmar que en otros sistemas operativos que he probado (FreeBSD y Debian), instalé Zsh (v5.8) y en ambos, el comportamiento descrito es el mismo que aquí - no está configurado. Esto apunta a una decisión de la gente de Zsh de que este era su comportamiento preferido del entorno de ejecución. Como no podemos especular por qué Apple hizo algo, es aún más difícil especular por qué Zsh hizo/no hizo algo y por qué Apple no lo modificó. Aunque probablemente es una apuesta segura que Apple simplemente siguió con los valores por defecto.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X