Befehl wurde bei Ausführung mit „sudo bash“ nicht gefunden

Befehl wurde bei Ausführung mit „sudo bash“ nicht gefunden

Ich melde mich per SSH bei meinem Computer an und um dann einige Befehle ausführen zu können, muss ich sudo bashzuerst Folgendes tun.

Wenn ich in einer interaktiven Terminalsitzung Folgendes mache:

[vagrant@33 ~]$ sudo bash
[root@33 vagrant]# which bundle
/opt/upnxt/rbenv-0.4.0-7/shims/bundle

Dinge funktionieren. Aber wenn ich dies in einer Zeile tun muss:

[vagrant@33 ~]$ sudo bash -c "whoami; which bundle"
root
which: no bundle in (/sbin:/bin:/usr/sbin:/usr/bin)

Dinge funktionieren nicht mehr. Warum passiert das und was muss ich sonst noch mit dem zweiten Szenario machen, um es wie das erste ausführen zu können?

Antwort1

Wenn Sie aufrufen, sudo bashführen Sie eine neue Instanz von Bash mit aus user root environment. Wenn Sie aufrufen, sudo bash -c "whoami; which bundle"bleibt die Umgebung jedoch für Ihren Benutzer gleich. Wenn Sie dies nicht beabsichtigen, können Sie den letzten Aufruf über sudoOptionen ändern.-i

-ich,--Anmeldung

Führen Sie die Shell, die durch den Passwortdatenbankeintrag des Zielbenutzers angegeben ist, als Login-Shell aus. Dies bedeutet, dass loginspezifische Ressourcendateien wie.Profiloder.Anmeldungwird von der Shell gelesen. Wenn ein Befehl angegeben ist, wird er zur Ausführung über die Shell-Befehle an die Shell übergeben.-COption. Wenn kein Befehl angegeben ist, wird eine interaktive Shell ausgeführt. sudoversucht, vor dem Ausführen der Shell in das Home-Verzeichnis dieses Benutzers zu wechseln. Der Befehl wird in einer Umgebung ausgeführt, die der Umgebung ähnelt, die ein Benutzer beim Anmelden erhalten würde. DerBefehlsumgebungimsudoers(5) Das Handbuch dokumentiert, wie sich die Option -i auf die Umgebung auswirkt, in der ein Befehl ausgeführt wird, wenn die Sudoers-Richtlinie verwendet wird.

verwandte Informationen