Ich habe einen Alias, der einige Parameter an ein Tool weitergibt, das ich oft benutze. Manchmal laufe ich als ich selbst, manchmal unter sudo. Leider erkennt sudo den Alias natürlich nicht.
Hat jemand einen Tipp, wie man den Alias durchgibt?
In diesem Fall habe ich eine Reihe von Optionen für Perl beim Debuggen:
alias pd='perl -Ilib -I/home/myuser/lib -d'
Manchmal muss ich meine Tools als root debuggen, anstatt Folgendes auszuführen:
pd ./mytool --some params
Ich muss es unter sudo ausführen. Ich habe viele Möglichkeiten ausprobiert:
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'"
Ich hatte gehofft, dass mein aktueller pd-alias vollständig genutzt wird (falls ich ihn später anpassen muss), obwohl einige meiner Versuche überhaupt nicht präzise waren. Mein letzter Ausweg besteht darin, es in ein Shell-Skript zu schreiben und dieses irgendwo zu platzieren, wo Sudo es finden kann. Aber Aliase sind manchmal soooo praktisch, dass es ein letzter Ausweg ist.
A trailing space in value causes the next word to be checked for alias substitution when the alias is expanded.
sudo
, wieder während dieses halten willsudo
-passthrough Trick zugleich. Auch dies ist möglich: Um Optionen erneut zu verwenden, verwenden Sie\sudo
. Der Backslash überschreibt den Alias. (Viele scheinen das nicht zu wissen). Auf diese Weise können Sie ( Gefahr! ) Entfernen sogar Dateien ohne jede Warnung, die zwingendealias rm='rm -i'
allgemein angegeben in.bash-aliases
, einfach durch Eingabe\rm file-to-delete
.Mir ist nicht ganz klar, was Sie versuchen. Ich kann zwei Wege sehen:
Der richtige Weg
alias pd='sudo perl -Ilib -I/home/myuser/lib -d'
Dann ausführen
pd ./mytool
Wenn Sie wird Ihr Debugging-Befehl als root ausgeführt, die Vorteile von sudo bleiben jedoch erhalten (Audit-Trail, nicht aus einer Root-Shell heraus).Beispiel:
Der einfache Weg
Fügen Sie die Aliase zu root hinzu
.bashrc
und verwendensudo -i
Sie sie, wenn Sie sudo zu root machen.quelle
Habe einfach zwei Aliase und benutze eine Variable
Ich sehe keinen Grund für die Verwendung
awk
oder escut
sei denn, der Kernalias wurde nur einmal definiert, um das Ändern zu vereinfachen. Wenn das der Fall ist, dann funktioniert das:Hier ist eine vereinfachende Funktion, um Alias-Paare wie das oben stehende zu erstellen:
Benutzen:
Jetzt hast du
pd
undspd
plusct
undsct
.quelle
Ich wünschte, ich könnte zwei Antworten als "richtig" markieren. Wenn ich den richtigen Weg aus Insytes , ähm, aufschlussreichem Beitrag mit der awk (oder cut) -Lösung von Bill Weiss kombiniere , habe ich Folgendes gefunden :
Jetzt füge ich dies einfach in eine Shell-Funktion in meinem .bashrc oder so ein und erstelle dann "s" -Versionen aller meiner Aliase, die ich als root ausführen möchte.
Update : leichte Modifikation der simplen Funktion von Dennis Williamson , um die Bedienung zu vereinfachen:
Das heißt, ich muss nur "s" vor den gesamten Befehl setzen. Anstatt:
Ich füge gerade das s in der Front hinzu.
Und ich bin fertig. Sicher, der Computer leistet ein bisschen mehr Arbeit, aber dafür ist ein Computer gedacht. :-)
Vielen Dank!
quelle
alias sudo="sudo "
funktioniert perfekt.von http://www.shellperson.net/using-sudo-with-an-alias/
quelle
Wäre es nicht einfacher, ein Skript, das Ihre Optionen enthält, einfach zu hacken und dann in einem der Ordner abzulegen, in denen sich der Pfad für das reguläre Konto und den Stammordner befindet? Es würde wirklich nicht viel von einem Drehbuch brauchen.
quelle
Das ist grob, aber es funktioniert hier:
quelle
Fügen Sie ein "sudo" -Präfix zu ausgewählten Aliasen und Befehlen in Ihrem Namen hinzu
~/.bashrc
:quelle
alias sudo="sudo "
ist aber einfacher.Wie ein paar Mal gepostet, mach in '.bashrc':
alias sudo = 'sudo'
Der Grund dafür wird in 'man bash' und 'help alias' erklärt:
alias: alias [-p] [name [= wert] ...] Definiert oder zeigt Aliase an.
quelle
Sie möchten so etwas:
quelle
bash -i
(i = interaktiv) ist nur v4.0. Auf einem älteren Server, auf dem nochbash
v3 ausgeführt wird, würde dies höchstwahrscheinlich fehlschlagen. Aber beweise, dass ich mich geirrt habe;)-i
ist Bourne Shell, siehe: pubs.opengroup.org/onlinepubs/009695399/utilities/sh.html#!/bin/bash -i
nach dem Schebang vielleicht verwechselt , was anscheinend nicht dasselbe ist (?). Um es kurz zu machen, für die Verwendunghistory
in einembash
Skript (und nicht in der "Live" -Befehlszeile) ist die-i
Option erforderlich , die ich auf einem Server mit "nur"bash
v3 nicht zum Arbeiten bringen konnte . Und das ist eine Tatsache.Ich weiß nicht, ob es am klügsten ist, eine Produktionsbox zu verwenden, aber lokal verwende ich sie
quelle
Können Sie den Alias zum .bashrc von root hinzufügen oder einfach .bashrc über sudo ausführen, bevor Sie den Befehl ausführen?
quelle