Considere isto:
$ 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"
Por que exportar uma variável dentro de uma bash -c
sessão executada via ssh resulta nessa lista de declare -x
comandos (a lista de variáveis atualmente exportadas, até onde eu sei)?
Executar a mesma coisa sem o bash -c
não faz isso:
$ ssh localhost 'export foo=bar'
terdon@localhost's password:
$
Nem acontece se não o fizermos export
:
$ ssh localhost bash -c 'foo=bar'
terdon@localhost's password:
$
Eu testei isso sshing de uma máquina Ubuntu para outra (ambas executando o bash 4.3.11) e em uma máquina Arch, sshing para si mesma, como mostrado acima (versão do bash 4.4.5).
O que está acontecendo aqui? Por que exportar uma variável dentro de uma bash -c
chamada produz essa saída?
export
estou tentando entender o que está acontecendo. Vou editar para esclarecer que isso só acontece na exportação.
export
correr sozinho? Isso eu não tinha entendido.
foo=bar
não aparece na lista.
export
. Zsh faz a mesma coisa.