Existe-t-il un moyen d'exécuter une commande "comme si" elle se trouvait dans une nouvelle session de connexion?
J'ai déjà essayé env -i
. Cependant, je ne veux pas traiter de diverses variables ENV que je dois définir ou désactiver.
J'ai également essayé bash -c "some command"
et bash -l -c "some commmand"
, mais ils copient tous l'environnement actuel.
Le plus proche que je suis venu est une solution ghetto: ssh me@localhost "some command"
/bin/bash --login
pour obtenir ce comportement. Je l'utilise par exemple pour obtenir un bon$PATH
./bin/bash --l
ce que j'ai déjà essayé. Il copie l'environnement d'origine. Essayez:export SOME_VAL=something
. Alors/bin/bash --login
. Alorsenv | grep SOME_VAL
. La valeur sera là.Réponses:
Voici une réponse qui ne nécessite pas les privilèges sudo ou le mot de passe de l'utilisateur, mais fournit toujours un environnement comme celui que vous obtiendriez lors d'une nouvelle connexion.
Exemple:
Décomposer cela pour une explication:
env -i HOME="$HOME"
: Efface l'environnement. Le-i
met en place un environnement vide sans aucune variable . Ceci est problématique car cela signifie que si vous essayez de l'exécuter naïvement,bash -l
il ne chargera pas votre.bash_profile
etc., car ilHOME
n'est pas défini. Pour atténuer cela, nous passons explicitementHOME="$HOME"
, créant un environnement oùHOME
(et seulementHOME
) est défini.bash -l -c ...
: Exécute la commande souhaitée dans un shell de connexion. Vous aurez besoin d'un shell de connexion pour cela, car nous partons d'un environnement propre et devons tout recharger.Notamment:
sudo
version le fait).su
version le fait).ssh
version le fait).la source
Pour quelque chose d'encore plus agressif
env -i bash
, mais cela désactive tout, y compris $ HOME et $ TERM.la source
man sudo
et j'ai constaté: "si l'utilisateur cible est le même que l'utilisateur appelant, aucun mot de passe n'est requis." (Lesu
semble toujours demander un mot de passe.) Je suis tellement idiot d'avoir oublié quelque chose de si simple dans le premier paragraphe d'uneman
page :( J'ai évité sudo en premier lieu parce que je supposais qu'il demandait toujours un mot de passe. Merci encore une fois!$USER
êtes connecté, vous devrez vous connecter en tant que root, puis ensudo -u ...
tant qu'utilisateur. Si vous faites simplement ensudo -u
tant qu'utilisateur, vous hériterez.sudo
accès. Existe-t-il une méthode alternative qui ne nécessite pas sudo?su -l $USER
.ssh $USER@localhost <command>
fonctionne mieux