Qu'est-ce qu'une invite de signe de pourcentage dans un shell?

16

En regardant une vidéo, j'ai vu ce qui suit:

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

Quel est ce %signe avant morecommande?

Maxim Koretskyi
la source
2
export PS1=%??
Roman Gräf
@ RomanGräf, qu'est-ce que c'est?
Maxim Koretskyi
1
Vous pouvez changer le $signe normal en utilisant export PS1=......est le remplacement.
Roman Gräf
@ RomanGräf, je vois, merci pour la suggestion
Maxim Koretskyi
@Roman Gräf: Vous pouvez réellement faire bien plus avec l'invite que de simplement changer le caractère. Le mien inclut le nom de la machine (car j'ai souvent des fenêtres xterm sur d'autres machines) et les derniers répertoires du chemin actuel. Et si je suis root, ça devient rouge vif.
jamesqf

Réponses:

29

C'est l'invite du shell, ou plus précisément, c'est l' invite principale du shell ( il y en a plusieurs ). C'est la façon dont le shell dit " allez-y, je suis prêt à participer maintenant ".

L' %invite est courante dans les cshshells de type tandis que sh-shells (comme bashet ksh93) utilise habituellement a $comme invite.

L'invite se transforme généralement en #pour l'utilisateur root, car un utilisateur suffisamment puissant devrait se souvenir de ce pouvoir en ayant une autre invite (comme le dit la norme POSIX).

L'invite principale dans les shshells de type est déterminée par la valeur de la variable shell PS1.


Résumé des commentaires ci-dessous, avec des ajouts:

Le #caractère de l'invite racine (utilisé par les deux shet les cshshells) coïncide avec le caractère de commentaire de shell commun. Copier et coller une commande en tant que root rendrait la commande collée inopérante si l'invite du shell était également copiée. Notez que cela a #été adopté comme invite racine avant que le shell ait une convention de commentaire (référence: email de Doug McIlroy ).

Les coquilles eset rcde Plan 9 utilisent le ;caractère comme invite par défaut. Une conséquence de cela est que copier et coller une commande, y compris l'invite, signifie toujours que la commande collée est valide (et qu'elle sera exécutée).

Un moyen d'activer une invite personnalisée, mais toujours collable par copie, serait d'utiliser : something ;, où somethingpourrait être le répertoire actuel, le nom d'hôte ou l'heure, par exemple.

Kusalananda
la source
2
Aussi dans zsh(un shell de style Bourne, mais avec beaucoup de fonctionnalités de tcsh). Notez que les shells de type Bourne et csh-like utilisent généralement #pour les utilisateurs de l'uid 0.
Stéphane Chazelas
1
Notez également que les rcshells de type similaire ;y sont utilisés (on peut copier-coller la ligne complète et c'est un code shell valide, même idée que l' #invite de root étant un commentaire).
Stéphane Chazelas
2
un choix très important de # pour root est que si vous copiez une commande en l'incluant, vous ne causerez pas de dommages (comme # démarre un commentaire, ainsi commentera votre commande (enfin, sa première ligne)). Certaines personnes utilisent ">" et si vous le copiez également, il peut encombrer (vider complètement) les binaires si la commande a un chemin complet ou relatif ou si vous êtes dans le bon répertoire (et que vous disposez des droits suffisants, par exemple si vous êtes racine). J'ai vu cela se produire.
Olivier Dulac
1
@ StéphaneChazelas: La convention #-for-root n'a-t-elle pas vu le jour bien avant que les terminaux où couper-coller une ligne entière soit facilement possible ne deviennent courants?
hmakholm a laissé Monica
@HenningMakholm, oui. Il a commencé avant même que csh n'introduise # en tant que leader des commentaires. Pourtant, il est vrai que les #...lignes sont des commentaires lorsqu'elles sont copiées-collées même si ce n'était pas l'intention. Je ne sais pas si c'était l'intention derrière ;dans une rcou l' autre, bien que je l' observe est une conséquence pratique.
Stéphane Chazelas