Pertimbangkan ini:
$ 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"
Mengapa mengekspor variabel dalam bash -c
sesi berjalan melalui ssh menghasilkan daftar declare -x
perintah (daftar variabel yang saat ini diekspor, sejauh yang saya tahu)?
Menjalankan hal yang sama tanpa bash -c
melakukan itu:
$ ssh localhost 'export foo=bar'
terdon@localhost's password:
$
Juga tidak akan terjadi jika kita tidak export
:
$ ssh localhost bash -c 'foo=bar'
terdon@localhost's password:
$
Saya menguji ini dengan sshing dari satu mesin Ubuntu ke yang lain (keduanya menjalankan bash 4.3.11) dan pada mesin Arch, sshing untuk dirinya sendiri seperti yang ditunjukkan di atas (bash versi 4.4.5).
Apa yang terjadi di sini? Mengapa mengekspor variabel di dalam bash -c
panggilan menghasilkan output ini?
export
, saya mencoba memahami apa yang sedang terjadi. Saya akan mengedit untuk menjelaskan bahwa ini hanya terjadi ketika mengekspor.
export
dijalankan sendiri? Itu saya tidak mengerti.
foo=bar
tidak muncul dalam daftar.
export
. Zsh melakukan hal yang sama.