Considère ceci:
$ ssh localhost bash -c 'export foo=bar'
terdon@localhost's password:
declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"
declare -x HOME="/home/terdon"
declare -x LOGNAME="terdon"
declare -x MAIL="/var/spool/mail/terdon"
declare -x OLDPWD
declare -x PATH="/usr/bin:/bin:/usr/sbin:/sbin"
declare -x PWD="/home/terdon"
declare -x SHELL="/bin/bash"
declare -x SHLVL="2"
declare -x SSH_CLIENT="::1 55858 22"
declare -x SSH_CONNECTION="::1 55858 ::1 22"
declare -x USER="terdon"
declare -x XDG_RUNTIME_DIR="/run/user/1000"
declare -x XDG_SESSION_ID="c5"
declare -x _="/usr/bin/bash"
Pourquoi l'exportation d'une variable dans une bash -c
session exécutée via ssh entraîne-t-elle cette liste de declare -x
commandes (la liste des variables actuellement exportées, pour autant que je sache)?
Exécuter la même chose sans le bash -c
ne fait pas ça:
$ ssh localhost 'export foo=bar'
terdon@localhost's password:
$
Cela ne se produit pas non plus si nous ne export
:
$ ssh localhost bash -c 'foo=bar'
terdon@localhost's password:
$
J'ai testé cela en sshing d'une machine Ubuntu à une autre (exécutant bash 4.3.11) et sur une machine Arch, en sshing comme indiqué ci-dessus (bash version 4.4.5).
Que se passe t-il ici? Pourquoi l'exportation d'une variable à l'intérieur d'un bash -c
appel produit-elle cette sortie?
export
, j'essaie de comprendre ce qui se passe. Je vais modifier pour préciser que cela ne se produit que lors de l'exportation.
export
exécution seule? Que je n'avais pas compris.
foo=bar
n'apparaît pas dans la liste.
export
. Zsh fait la même chose.