J'ai un alias qui transmet certains paramètres à un outil que j'utilise souvent. Parfois je cours seul, parfois sous sudo. Malheureusement, bien sûr, sudo ne reconnaît pas le pseudonyme.
Quelqu'un a-t-il une idée sur la façon de transmettre le pseudonyme?
Dans ce cas, j’ai un tas d’options pour perl lors du débogage:
alias pd='perl -Ilib -I/home/myuser/lib -d'
Parfois, je dois déboguer mes outils en tant que root, donc au lieu d’exécuter:
pd ./mytool --some params
J'ai besoin de l'exécuter sous sudo. J'ai essayé de nombreuses manières:
sudo eval $(alias pd)\; pd ./mytool --some params
sudo $(alias pd)\; pd ./mytool --some params
sudo bash -c "$(alias pd)\; pd ./mytool --some params"
sudo bash -c "$(alias pd); pd ./mytool --some params"
sudo bash -c eval\ "$(alias pd)\; pd ./mytool --some params"
sudo bash -c eval\ "'$(alias pd)\; pd ./mytool --some params'"
J'espérais trouver un moyen agréable et concis de s'assurer que mon alias actuel de pd était pleinement utilisé (au cas où je devrais le modifier plus tard), même si certaines de mes tentatives n'étaient pas du tout concises. Mon dernier recours est de le mettre dans un script shell et de le placer quelque part que sudo pourra trouver. Mais les pseudonymes sont tellement utiles parfois, alors c'est un dernier recours.
A trailing space in value causes the next word to be checked for alias substitution when the alias is expanded.
sudo
, tout en voulant garder cettesudo
astuce en même temps. Même cela peut être fait: pour utiliser à nouveau les options, utilisez\sudo
. La barre oblique inverse remplacera l'alias. (Beaucoup ne semblent pas savoir à ce sujet). De cette façon, vous pouvez ( danger! ) Même supprimer des fichiers sans aucun avertissement, en remplaçant le plusalias rm='rm -i'
souvent spécifié dans.bash-aliases
, simplement en tapant\rm file-to-delete
.Je ne suis pas très clair sur ce que vous essayez de faire. Je peux voir deux façons:
Le droit chemin
alias pd='sudo perl -Ilib -I/home/myuser/lib -d'
En exécutant ensuite
pd ./mytool
, votre commande de débogage sera exécutée en tant que root, tout en préservant les avantages de sudo (suivi d'audit, ne fonctionnant pas à partir d'un shell root).Exemple:
La manière facile
Ajoutez les alias à root
.bashrc
et utilisez-les àsudo -i
chaque fois que vous êtes en root.la source
Juste deux alias et utiliser une variable
Je ne vois pas pourquoi utiliser
awk
ou àcut
moins que l'alias principal ne soit défini qu'une seule fois afin de faciliter la modification. Si c'est le cas, cela fonctionne:Voici une fonction simpliste pour créer des paires d'alias telles que celle ci-dessus:
Utiliser:
Maintenant vous avez
pd
etspd
plusct
etsct
.la source
J'aimerais pouvoir marquer deux réponses comme "correctes". En combinant le bon chemin du message perspicace d’ Insyte avec la solution awk (ou cut) de Bill Weiss , j’ai trouvé ceci:
Maintenant, je vais simplement mettre cela dans une fonction shell dans mon .bashrc ou quelque chose du genre, puis créer les versions "s" de tous mes alias que je souhaite utiliser en tant que root.
Mise à jour : légère modification de la fonction simpliste de Dennis Williamson pour la rendre un peu plus facile à utiliser:
Cela signifie que je dois juste mettre "s" devant toute la commande. Au lieu de:
Je viens d'ajouter le s à l'avant.
Et j'ai fini. Bien sûr, l'ordinateur fait un peu plus de travail, mais c'est à cela que sert l'ordinateur. :-)
Merci!
la source
alias sudo="sudo "
fonctionne parfaitement.de http://www.shellperson.net/using-sudo-with-an-alias/
la source
Ne serait-il pas plus simple de pirater un script contenant vos options, puis de le placer quelque part dans l'un des dossiers constituant le chemin d'accès du compte et de la racine classiques? Cela ne prendrait vraiment pas beaucoup de script.
la source
C'est rugueux, mais ça marche ici:
la source
Ajoutez un préfixe "sudo" aux alias sélectionnés ET aux commandes de votre
~/.bashrc
type:la source
alias sudo="sudo "
c'est plus facile cependant.Comme posté à quelques reprises, faites dans '.bashrc':
alias sudo = 'sudo'
La raison pour laquelle est expliquée dans 'man bash' et 'help alias':
alias: alias [-p] [nom [= valeur] ...] Définissez ou affichez des alias.
la source
Vous voulez quelque chose comme ça:
la source
bash -i
(i = interactif) est uniquement v4.0. Donc, sur un serveur plus ancien où labash
v3 était toujours en cours d'exécution, cela échouerait probablement. Mais prouve-moi que j'ai tort, n'importe qui, vas-y;)-i
Bourne shell, voir: pubs.opengroup.org/onlinepubs/009695399/utilities/sh.html#!/bin/bash -i
après le shebang, ce qui n'est apparemment pas le même (?). Pour couper une longue histoire courte, en utilisanthistory
dans unbash
scénario (et non pas sur la ligne de commande « live ») va exiger de l'-i
option que je ne pouvais pas faire fonctionner sur un serveur avec « seulement »bash
v3 installé. Et c'est un fait.Je ne sais pas si c'est la chose la plus sage à faire sur une boîte de production, mais j'utilise localement
la source
Pouvez-vous ajouter l'alias à .bashrc de la racine ou simplement exécuter .bashrc via sudo avant votre commande?
la source