Rozważ to:
$ 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"
Dlaczego eksportowanie zmiennej w ramach bash -c
sesji uruchamianej przez ssh powoduje, że ta lista declare -x
poleceń (lista aktualnie eksportowanych zmiennych, o ile mi wiadomo)?
Uruchamianie tego samego bez tego bash -c
nie robi:
$ ssh localhost 'export foo=bar'
terdon@localhost's password:
$
Nie stanie się tak, jeśli nie export
:
$ ssh localhost bash -c 'foo=bar'
terdon@localhost's password:
$
Przetestowałem to przez sshing z jednego komputera Ubuntu na inny (oba z uruchomionym bash 4.3.11) i na komputerze Arch, sshing do siebie, jak pokazano powyżej (wersja bash 4.4.5).
Co tu się dzieje? Dlaczego eksportowanie zmiennej wewnątrz bash -c
wywołania daje taki wynik?
export
, próbuję zrozumieć, co się dzieje. Przeredaguję, aby wyjaśnić, że dzieje się to tylko podczas eksportowania.
export
samego uruchomienia? Tego nie zrozumiałem.
foo=bar
nie ma go na liście.
export
. Zsh robi to samo.