Учти это:
$ 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"
Почему экспорт переменной в bash -cсеансе, запущенном через ssh, приводит к этому списку declare -xкоманд (насколько я могу судить, список экспортируемых переменных в данный момент)?
Запуск того же самого без без bash -cэтого не делает:
$ ssh localhost 'export foo=bar'
terdon@localhost's password:
$
И не произойдет, если мы не сделаем export:
$ ssh localhost bash -c 'foo=bar'
terdon@localhost's password:
$
Я проверил это, выполнив sshing с одного компьютера с Ubuntu на другой (на обоих запущен bash 4.3.11) и на компьютере Arch, выполняя sshing себе, как показано выше (версия bash 4.4.5).
Что тут происходит? Почему экспорт переменной внутри bash -cвызова производит этот вывод?
export, я пытаюсь понять, что происходит. Я отредактирую, чтобы уточнить, что это происходит только при экспорте.
exportзапуска в одиночку? Этого я не поняла.
foo=barне появляется в списке.
export. Zsh делает то же самое.