Signe de pourcentage (%) devant la commande shell

9

Je viens de coller un tas de code dans mon shell, mais j'ai oublié de supprimer le %début avant d'exécuter la commande. Il semble n'avoir rien fait. Pourquoi cela ne fait rien dans mon shell ( zsh )?

> % echo foo

En bash , je reçois ce qui suit

> % echo foo
bash: fg: %: no such job

Je veux juste être sûr que l'exécution de ma commande n'a pas eu d'effets secondaires.

Dave
la source

Réponses:

9

%fait référence à un 'jobid' qui est utilisé dans le cadre des fonctionnalités "contrôle de travail et contrôle de processus" de zsh. Pour citer le guide de l'utilisateur:

'fg' is the default operation on jobs referred to with the '%' notation,
so just typing '%1' with no command name would have worked, too.

Exemple:

$> man zshall &
[1]  + 31392 suspended (tty output)  man zshall
$> jobs
[1]  + suspended (tty output)  man zshall
$> %
<manpage-opens-for-zshall>

En savoir plus à ce sujet ici: http://zsh.sourceforge.net/Guide/zshguide03.html#l39

Pour répondre à votre vraie question: Si votre zsh n'y met pas d'avertissement ("fg: pas de travail en cours" ou similaire) alors il y a / A ÉTÉ un travail. Exemple:

$> sleep 60 &
$> % echo foo
[1]  + 411 running    sleep 60
fg: job not found: echo

Le %vient de récupérer le processus d'arrière-plan et l'exécute. Après 60 secondes, il a obtenu le prochain «jobid» qui n'a pas été trouvé.

Ainsi: Le comportement que vous avez vécu est un peu étrange. Sans votre zshrc complet, il est difficile de dire ce qui se passe exactement. Il semble que vous ayez réussi à dire à votre zsh que le caractère '%' commence un commentaire. Je vérifierais le histcharsparamètre pour sa 3ème valeur:

$> echo $histchars
akira
la source
Génial, merci. J'ai pu reproduire vos tests et mettre en avant un travail en cours avec %. Bonne prise $histcharsaussi, mais la mienne est un signe de hachage ( !^#). Je suppose que la réponse à mon cas particulier est qu'il y avait des processus en arrière-plan se comportant étrangement dans zsh. Merci encore pour la leçon shell!
Dave