Mám program, který je nainstalován ve vlastním adresáři pod /opt. Aby bylo snazší jej spouštět, upravil jsem svůj bashrc tak, aby do mé cesty přidal uvedený adresář:
export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin
To funguje dobře, pokud chci spustit program bez sudo. Pokud se to však pokusím spustit pomocí sudo, selže s chybou „příkaz nenalezen“.
$ sudo godi_console
sudo: godi_console: command not found
Kontrola proměnné PATH po použití sudo odhalí, že nezahrnuje stejnou PATH jako normální uživatel:
$ sudo sh
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Proč není PATH stejná? Dělám něco špatně? Jsem na Debianu Jessie, pokud to má nějaký význam.
Jedna věc, kterou jsem zkusil, bylo vyvolat /opt/godi/sbin/godi_console přímo a předat absolutní cestu ke spustitelnému souboru. Bohužel to v tomto konkrétním případě nepomohlo, protože samotná godi_console závisí na správném nastavení PATH.
Přijatá odpověď:
Vždy můžete:
sudo env "PATH=$PATH" godi_console
Jako bezpečnostní opatření v Debianu /etc/sudoers
má secure_path
možnost nastavena na bezpečnou hodnotu.
Všimněte si, že:
sudo "PATH=$PATH" godi_console
Kde sudo
zpracovává úvodní argumenty obsahující =
znaky jako samostatné přiřazení proměnných prostředí by také fungovaly při spuštění godi_console
s vaším $PATH
(na rozdíl od secure_path
) ve svém prostředí, ale neovlivní to sudo
's vyhledávací cesta pro spustitelný soubor, takže by nepomohlo sudo
při hledání té godi_console
.