Dies ist definitiv eine sudound eine GNU/LinuxFrage, nicht wirklich eine PythonFrage. Wenn Sie sudo foo arg1 arg2das System zum ersten Mal ausführen , wird eine Shell gestartet (die für root festgelegt ist, nicht für Sie), die als ausgeführt wird rootund dann "ausgeführt" wird foo arg1 arg2. Dies ist nicht dasselbe wie Anmelden bei rootund Eingeben foo arg1 arg2in die Befehlszeile, sondern Schließen. Es gibt ausführbare Dateien, die es einem Benutzer mit Sudo-Berechtigung nicht ermöglichen, einige Dinge auszuführen, und einige zusätzliche Umgebungsvariablen, die für Sie festgelegt wurden und die Sie sehen können, wenn Sie ausgeführt werden sudo env. Du wirst etwas sehen wie:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PS1=%%
PS2=cont>
MAIL=/var/mail/root
LOGNAME=root
USER=root
USERNAME=root
HOME=/root
SHELL=/bin/bash
SUDO_COMMAND=/usr/bin/env
SUDO_USER=my_user
SUDO_USER=spt
SUDO_UID=1000
SUDO_GID=1000
SUDO_COMMAND=/usr/bin/env
Und wenn es sich bei der Shell um eine Bash handelt, hat die Subshell wahrscheinlich den Inhalt der /root/.bashrcvorhandenen Shell eingelesen . Darüber hinaus führt die my_userBash-Shell eine Alias-Erweiterung für das erste Element (dh das sudo in sudo foo arg1 arg2) und nicht für das zweite Element ( foo ) durch. Wenn fooes sich also auch um einen Alias handelt, wird dieser nicht erweitert, und daher wird die Subshell, die als ausgeführt rootwird, fooals Literal ausgeführt und nicht fooals der Alias, unter dem Sie erstellt haben my_user. Es gibt verschiedene Möglichkeiten, um Ihr Problem zu beheben. Man definiert einen Alias für sudomit einem abschließenden Leerzeichen:
alias='sudo '
Wie hier erklärt , wird das, was danach kommt sodo, ebenfalls alias-erweitert, bevor es zur Ausführung an die Subshell gesendet wird.
Eine andere Möglichkeit besteht darin, die /root/.bashrcoder eine gleichwertige Datei zu bearbeiten und eine der folgenden Aktionen auszuführen:
- Prepend die Position des gewünschten Python auf die
$PATHVariable mit so etwas wieexport PATH=/path/to/foo:$PATH
- Definieren Sie dort den gewünschten Alias
Oder Sie könnten etwas (Mildes) Riskantes und Fauleres tun, aber es ist sehr effektiv und läuft einfach sudo (cd /root && ln -s /home/my_user/.bashrc)und rootwird immer nur Ihre my_user/.bashrcDatei als Quelle verwenden.
sudo type python? (Ich vermute, dass Siepythonauf etwas anderes ausgerichtet sind oder irgendwo eine Funktion erstellt haben.)