Есть ли способ выполнить команду «как будто» в новой сессии входа в систему?
Я уже попробовал env -i
. Однако я не хочу иметь дело с различными переменными ENV, которые я должен установить или сбросить.
Я тоже пробовал bash -c "some command"
и bash -l -c "some commmand"
, но они все копируют текущую среду.
Самое близкое, что я пришел, - это решение гетто: ssh me@localhost "some command"
/bin/bash --login
чтобы получить такое поведение. Я использую это, например, чтобы получить надлежащее$PATH
./bin/bash --l
, который я уже пробовал. Копирует оригинальную среду. Попробуйте:export SOME_VAL=something
. Потом/bin/bash --login
. Потомenv | grep SOME_VAL
. Значение будет там.Ответы:
Вот ответ, который не требует привилегий sudo или пароля пользователя, но все же обеспечивает среду, подобную той, которую вы получите при новом входе в систему.
Пример:
Разбить это для объяснения:
env -i HOME="$HOME"
: Очищает окружающую среду. В-i
устанавливает пустую среду с каким - либо переменными бы то ни было . Это проблематично, потому что это означает, что если вы попытаетесь наивно запустить,bash -l
он не будет загружать ваши.bash_profile
и т. Д., Потому чтоHOME
не установлен. Чтобы смягчить это, мы явно передаемHOME="$HOME"
, создавая среду, гдеHOME
(и толькоHOME
) установлен.bash -l -c ...
: Запускает нужную команду в оболочке входа в систему. Для этого вам понадобится оболочка входа в систему, потому что мы начинаем с чистой среды и должны перезагрузить все.В частности:
sudo
версия делает).su
версия делает).ssh
версия этого требует).источник
Для чего-то еще более агрессивного
env -i bash
, но это отменяет все, включая $ HOME и $ TERM.источник
man sudo
и обнаружил: «если целевой пользователь совпадает с вызывающим пользователем, пароль не требуется». (su
Кажется, пароль всегда запрашивается.) Я такой дурак, что пропустил что-то такое простое в первом абзацеman
страницы :( Во-первых, я избегал sudo, потому что предполагал, что он всегда спрашивает пароль. Спасибо снова!$USER
вам нужно будет войти как root, а затемsudo -u ...
как ваш пользователь. Если вы просто делаетеsudo -u
как пользователь, вы будете наследовать.sudo
доступа. Есть ли альтернативный метод, который не требует sudo?su -l $USER
.ssh $USER@localhost <command>