¿Qué es el símbolo de signo de porcentaje en un shell?

16

Mientras miraba un video, vi lo siguiente:

% more tinyUF.txt
10
4 3
3 8
6 5

¿Qué es este %signo antes del morecomando?

Maxim Koretskyi
fuente
2
export PS1=%??
Roman Gräf
@ RomanGräf, ¿qué es eso?
Maxim Koretskyi
1
Puede cambiar el $signo normal usando export PS1=...dónde ...está el reemplazo.
Roman Gräf
@ RomanGräf, ya veo, gracias por la sugerencia
Maxim Koretskyi
@Roman Gräf: En realidad, puedes hacer mucho más con el aviso que simplemente cambiar el personaje. El mío incluye el nombre de la máquina (ya que a menudo tengo ventanas xterm en otras máquinas) y los últimos directorios en la ruta actual. Y si soy root, se vuelve rojo brillante.
jamesqf

Respuestas:

29

Ese es el indicador del shell, o más precisamente, es el indicador primario del shell ( hay varios ). Es la forma en que el shell dice " adelante, estoy listo para la entrada ahora ".

El %indicador es común en los cshshells de tipo mientras que los shshells (like bashy ksh93) normalmente usan a $como el prompt.

El aviso generalmente cambia #para el usuario raíz, ya que un usuario suficientemente poderoso debe recordar ese poder mediante un aviso alternativo (como dice el estándar POSIX).

El indicador primario en shshells de tipo está determinado por el valor de la variable de shell PS1.


Resumen de los comentarios a continuación, con adiciones:

El #carácter del indicador raíz (utilizado por ambos shy cshshells) coincide con el carácter de comentario de shell común. Copiar y pegar un comando como root haría que el comando pegado no funcionara, si el indicador de shell también se copiara. Tenga en cuenta que #se adoptó como el indicador raíz antes de que el shell tuviera una convención de comentarios (referencia: correo electrónico de Doug McIlroy ).

Los shells esy rcdel Plan 9 usan el ;carácter como indicador predeterminado. Una consecuencia de esto es que copiar y pegar un comando, incluida la solicitud, significará que el comando pegado es válido (y se ejecutará).

Una forma para permitir que uno tenga una costumbre, pero todavía copiar-pastable, Indicador Shell, sería la de utilizar : something ;, donde somethingpodría ser el directorio actual, el nombre de host o la hora, por ejemplo.

Kusalananda
fuente
2
También en zsh(un shell de estilo Bourne, pero con muchas características de tcsh). Tenga en cuenta que los shells de tipo Bourne y csh suelen usarse #para usuarios de uid 0.
Stéphane Chazelas
1
También tenga en cuenta que los rcshells similares se usan ;allí (uno puede copiar y pegar la línea completa y ese es un código de shell válido, la misma idea que la #solicitud de root es un comentario).
Stéphane Chazelas
2
Una opción muy importante de # para root es que si copia un comando que lo incluye no causará daños (como # inicia un comentario, también comentará su comando (bueno, su primera línea)). Algunas personas usan ">" y si lo copia también, puede bloquear (vaciar completamente) los binarios si el comando tiene una ruta completa o relativa o si está en el directorio correcto (y tiene suficientes derechos, por ejemplo, si está raíz). He visto esto pasar.
Olivier Dulac
1
@ StéphaneChazelas: ¿No se originó la convención # -para-raíz mucho tiempo antes de que las terminales donde cortar y pegar una línea completa sea fácilmente posible se volvieran comunes?
hmakholm dejó a Mónica
@HenningMakholm, sí. Se originó incluso antes de que csh introdujera # como líder de comentarios. Aún así, es cierto que las #...líneas son comentarios cuando se copian, incluso si no era la intención. No sé si era la intención que hay detrás ;de rcambos, aunque observo que es una consecuencia conveniente.
Stéphane Chazelas