Nie wierzę, że moje pytanie jest klasycznym pytaniem env_keep, które czasami pojawia się ponownie. zachowanie zmiennych środowiskowych między powłokami.
Chcę zachować wyeksportowaną funkcję i wyeksportowaną zmienną środowiskową w nie tylko sudo -s, ale także wtedy, gdy dana osoba działa sudo command. Nie mogę edytować pliku / etc / sudoers, który wygląda tak:
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
Jestem jednak w stanie edytować /etc/sudoers.d. Próbowałem Defaults! Env_reset, ale to nie pomaga. Próbowałem także env_keep, ale to też nie działa. W końcu próbowałem Defaults env_keep + = "mojafunkcja".
Kiedy mówię, to nie działa, to znaczy, że jeśli biegnę sudo -s, a potem envwidzę, jest ochrona, jednak zmienne i funkcje nie są zachowane, jeśli biegnę sudo somecommand. Celem jest zapewnienie, aby zmienna środowiskowa była zawsze przekazywana do pliku binarnego, niezależnie od tego, czy jest wywoływana jako zwykły użytkownik, czy jako root.
Krótko mówiąc, to działa:
test_var="hello world"
sudo -s
echo $test_var
Ale to nie działa i chciałbym
test_var="hello world"
sudo /bin/bash -c echo $test_var
Jeśli ktoś może doradzić, byłoby to bardzo wskazane. Nie jestem pewien, czy jest to możliwe, biorąc pod uwagę ograniczenia związane z niemożnością edycji / etc / sudoers, pomimo możliwości edycji /etc/sudoers.d.
Z góry dziękuję
sudo -Erozwiązuje twój problem? Jeśli chcesz, nie musisz przepuszczać opcji za każdym razem, gdy możesz utworzyć alias sudo -E.
sudo -E echo $test_varwtedy otrzymam odpowiedź Hello world.