J'ai une fonction bash (ou alias), par exemple function install() {sudo apt-get install $@}
. Lors de l'exécution de la commande install dicelab
, je m'attends à ce que ce soit réellement exécuté sudo apt-get install dicelab
. Où puis-je voir ce qui était réellement exécuté par le shell? Je voudrais m'assurer que mes alias plus compliqués fonctionnent comme prévu.
20
$@
partie de votre alias? N'oubliez pas que les alias ne prennent pas vraiment en charge les arguments, qui se développeront aux paramètres de position (le cas échéant) du contexte appelant l'alias. La façon habituelle de fonctionnersomealias some args
fonctionne simplement en développant l'alias et en laissant les arguments pour le suivre. Si vous voulez réellement pouvoir accéder aux arguments, utilisez une fonction et citez le"$@"
"$@"
, les arguments avec des espaces ou des caractères globaux brûleront autrement.Réponses:
Utilisation
set -x
dans la coquille.En utilisant
set -x
tour à tour sur l'xtrace
option shell ( laset +x
désactive) et devrait fonctionner dans tous les Bourne comme des coquillages, commebash
,dash
ksh93
,pdksh
etzsh
. Cela invite le shell à afficher la commande qui est exécutée après les extensions d'alias et les extensions de variables, etc.La sortie sera sur le flux d'erreur standard du shell (tout comme l'invite ordinaire) afin qu'elle n'interfère pas avec les redirections de la sortie standard, et elle sera précédée d'une invite définie par la
PS4
variable shell (+␣
par défaut).Exemple avec quelques fonctions:
Je cours avec
set -x
tous mes shells interactifs par défaut. C'est agréable de voir ce qui a réellement été exécuté ... mais j'ai remarqué que la complétion programmable des onglets, etc. peut provoquer une sortie de trace indésirable dans certains shells.la source
Vous pouvez utiliser
shell-expand-line
, qui est lié à Control- Alt- epar défaut:Entre autres, il remplacera les alias dans la ligne courante avec leur définition afin que vous puissiez voir une commande que vous êtes toujours aller courir. Exemple:
la source
shell-expand-line
?zsh
. Mais certaines personnes ont trouvé leurs propres idées: wiki.math.cmu.edu/iki/wiki/tips/20140625-zsh-expand-alias.htmlVous pouvez utiliser le bash intégré
type
pour voir un alias ou une définition de fonction que vous allez exécuter:la source