Bedenken Sie:
$ 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"
Warum führt das Exportieren einer Variablen innerhalb einer bash -c
Sitzung, die über ssh ausgeführt wird, zu dieser Liste von declare -x
Befehlen (die Liste der derzeit exportierten Variablen, soweit ich das beurteilen kann)?
Dasselbe ohne das bash -c
auszuführen, macht das nicht:
$ ssh localhost 'export foo=bar'
terdon@localhost's password:
$
Es passiert auch nicht, wenn wir nicht export
:
$ ssh localhost bash -c 'foo=bar'
terdon@localhost's password:
$
Ich habe dies getestet, indem ich von einem Ubuntu-Rechner auf einen anderen (beide mit Bash 4.3.11) und auf einen Arch-Rechner sshing, wie oben gezeigt (Bash-Version 4.4.5).
Was ist denn hier los? Warum erzeugt das Exportieren einer Variablen innerhalb eines bash -c
Aufrufs diese Ausgabe?
export
, ich versuche zu verstehen, was passiert. Ich bearbeite, um zu verdeutlichen, dass dies nur beim Export geschieht.
export
Run alone? Das hatte ich nicht verstanden.
foo=bar
nicht in der Liste angezeigt wird.
export
. Zsh macht das Gleiche.