Considera questo:
$ 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"
Perché l'esportazione di una variabile all'interno di una bash -csessione viene eseguita tramite ssh in quell'elenco di declare -xcomandi (l'elenco delle variabili attualmente esportate, per quanto posso dire)?
Eseguire la stessa cosa senza bash -cnon farlo:
$ ssh localhost 'export foo=bar'
terdon@localhost's password:
$
Né succede se non export:
$ ssh localhost bash -c 'foo=bar'
terdon@localhost's password:
$
Ho testato questo da un computer Ubuntu da un altro (entrambi con bash 4.3.11) e su un computer Arch, lanciandosi su se stesso come mostrato sopra (bash versione 4.4.5).
Cosa sta succedendo qui? Perché l'esportazione di una variabile all'interno di una bash -cchiamata produce questo output?
export, sto cercando di capire cosa sta succedendo. Modificherò per chiarire che ciò accade solo durante l'esportazione.
exportRun da solo? Che non avevo capito.
foo=barnon appare nell'elenco.
export. Zsh fa la stessa cosa.