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 -c
phiên chạy qua ssh lại dẫn đến danh sách các declare -x
lệ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 -c
khô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 -c
cuộ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.
export
chạy một mình? Điều đó tôi đã không hiểu.
foo=bar
không xuất hiện trong danh sách.
export
. Zsh làm điều tương tự.