Je sais qu'il existe un ensemble spécifique de règles qui développent les commandes tapées par l'utilisateur. (parlons de shell bash.)
Est-il possible d'imprimer une commande sous la forme après expansion du shell? Cela semble être un bon utilitaire pour apprendre et s'assurer que le shell développe les caractères spéciaux.
par exemple
$ echo *
{all the filenames in current dir}
Je veux imprimer la commande développée, qui est la ligne suivante:
echo {all the filenames in .}
echo cat * | someprogram
ne fait pas ce que vous pourriez penser de cette réponse.Vous pouvez utiliser
set -x
.Par exemple, considérez le script:
Lorsqu'il est exécuté, il affiche l'
echo
instruction développée avant de l'exécuter:Et, comme le souligne Kundor, cela fonctionne également de manière interactive sur la ligne de commande:
Documentation
man bash
explique ce qui seset -x
passe comme suit:PS4
Comme indiqué ci-dessus, la valeur par défaut de est un signe plus suivi d'un espace.la source
Pour un shell interactif, appuyer sur
Ctrl+x
puis sur*
après avoir tapé le modèle glob éditera votre ligne de commande avec ce modèle glob développé. Depuis la page de manuel de bash:Vous pourriez également être intéressé par les extensions de la liste globale (
Ctrl+x
,g
).la source
Ctrl+x, *
immédiatement après avoir tapéecho *
et avant d'appuyer sur la touche Entrée? Si cela ne fonctionne toujours pas, vous pouvez modifier~/.inputrc
et lier glob-expand-word à autre chose.Ctrl+x
suivi deShift+8
. Vous pouvez essayer de voir si celaCtrl+x, g
fonctionne, ou, comme je l'ai dit plus tôt, attribuer votre propre clé dans le.inputrc
fichier.Si vous souhaitez voir comment les arguments sont développés ou tokenisés, vous pouvez utiliser un programme ou un script qui imprime ses arguments. Voici une implémentation dans
bash
:En supposant que vous mettiez cela dans un fichier appelé
printargs.sh
(et que vous le rendiez exécutable), vous obtiendrez une sortie comme celle-cila source