Probleme mit dem Bash-Pfad bei der Verwendung von 'su'

1233
Thuktun

In Ubuntu Lucid Lynx versuche ich das zu tun

su -l user -c "foo.sh args" 

Wo foo.shist ein ausführbares Bash-Skript auf dem PATHSet in ~user/.bashrc. Leider scheitert dies daran, dass es nicht finden kann foo.sh. Wenn ich su -l usermanuell foo.sh argsin die Befehlszeile eingebe, funktioniert es einwandfrei. Die PATH - Augmentation erfolgte in ~user/.bashrcund erscheint, ob oder nicht arbeiten ich sumit -linteraktiv, aber es scheint nicht zu funktionieren, wenn ich den Befehl angeben.

Irgendeine Idee, warum das so ist und wie ich das umgehen kann?

4

1 Antwort auf die Frage

2
Dennis Williamson

Die Shell wird als nicht interaktive Login-Shell gestartet, damit sie verarbeitet wird ~/.profileund nicht ~/.bashrc. Sie können Ihre PATHDatei in dieser Datei festlegen oder in einer gemeinsamen Datei ausführen, die von beiden erstellt wird. Einige Leute / Distributionen legen eine Startdatei fest, um die andere zu quellen, aber ich empfehle das nicht.

Von man bash:

Wenn bash als interaktive Login-Shell oder als nicht interaktive Shell mit der Option --login aufgerufen wird, werden zuerst Befehle aus der Datei / etc / profile gelesen und ausgeführt, sofern diese Datei vorhanden ist. Nach dem Lesen dieser Datei sucht sie in dieser Reihenfolge nach ~ / .bash_profile, ~ / .bash_login und ~ / .profile und liest und führt Befehle aus dem ersten vorhandenen Befehl aus, der lesbar ist. Die Option --noprofile kann verwendet werden, wenn die Shell gestartet wird, um dieses Verhalten zu verhindern.