考虑一下:
$ 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计算机上进行测试,如上所示(自bash版本4.4.5)向其自身旋转。
这里发生了什么?为什么在bash -c
调用内导出变量会产生此输出?
export
,我正在尝试了解正在发生的事情。我将进行编辑以澄清这仅在导出时发生。
export
单独运行的结果?我不明白。
foo=bar
它不会出现在列表中。
export
。Zsh做同样的事情。