Врахуйте це:
$ 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:
$
Я перевірив це, перенісши з однієї машини Ubuntu на іншу (обидва запущені bash 4.3.11) та на Arch-машині, sshing на себе, як показано вище (bash версія 4.4.5).
Що тут відбувається? Чому експорт змінної всередині bash -c
виклику дає такий результат?
export
, я намагаюся зрозуміти, що відбувається. Я редагую, щоб уточнити, що це відбувається лише під час експорту.
export
запуску один? Що я не зрозумів.
foo=bar
не відображається у списку.
export
. Зш робить те саме.