Xem xét điều này:
$ 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"
Tại sao việc xuất một biến trong bash -cphiên chạy qua ssh lại dẫn đến danh sách các declare -xlệnh đó (danh sách các biến hiện được xuất, theo như tôi có thể nói)?
Chạy cùng một thứ mà bash -ckhông làm điều đó:
$ ssh localhost 'export foo=bar'
terdon@localhost's password:
$
Nó cũng không xảy ra nếu chúng ta không export:
$ ssh localhost bash -c 'foo=bar'
terdon@localhost's password:
$
Tôi đã kiểm tra điều này bằng cách sshing từ máy Ubuntu này sang máy khác (cả chạy bash 4.3.11) và trên máy Arch, sshing cho chính nó như được hiển thị ở trên (bash phiên bản 4.4.5).
Những gì đang xảy ra ở đây? Tại sao xuất một biến trong một bash -ccuộc gọi tạo ra đầu ra này?
export, tôi đang cố gắng hiểu chuyện gì đang xảy ra. Tôi sẽ chỉnh sửa để làm rõ rằng điều này chỉ xảy ra khi xuất.
exportchạy một mình? Điều đó tôi đã không hiểu.
foo=barkhông xuất hiện trong danh sách.
export. Zsh làm điều tương tự.