Daftar variabel lingkungan yang diterima di SSHD secara default menyertakan LC_*
. Jadi:
LC_MY_BUILDN="1.2.3" ssh -o "SendEnv LC_MY_BUILDN" ssh-host 'echo $LC_MY_BUILDN'
1.2.3
Variabel dalam tanda kutip tunggal tidak dievaluasi. Gunakan tanda kutip ganda:
ssh [email protected] "~/tools/run_pvt.pl $BUILD_NUMBER"
Shell akan memperluas variabel dalam tanda kutip ganda, tetapi tidak dalam tanda kutip tunggal. Ini akan berubah menjadi string yang Anda inginkan sebelum diteruskan ke ssh
perintah.
Jika Anda menggunakan
ssh [email protected] "~/tools/run_pvt.pl $BUILD_NUMBER"
bukannya
ssh [email protected] '~/tools/run_pvt.pl $BUILD_NUMBER'
shell Anda akan menginterpolasi $BUILD_NUMBER
sebelum mengirim string perintah ke host jarak jauh.
(Jawaban ini mungkin tampak rumit, tetapi sejauh yang saya tahu, ini mudah diperluas dan kuat terkait spasi dan karakter khusus.)
Anda dapat memasukkan data langsung melalui input standar ssh
perintah dan read
itu dari lokasi yang jauh.
Dalam contoh berikut,
- array yang diindeks diisi (untuk kenyamanan) dengan nama variabel yang nilainya ingin Anda ambil di sisi jarak jauh.
- Untuk masing-masing variabel tersebut, kami memberikan
ssh
baris yang diakhiri null yang memberikan nama dan nilai variabel. - Dalam
shh
perintah itu sendiri, kita mengulangi baris-baris ini untuk menginisialisasi variabel yang diperlukan.
# Initialize examples of variables.
# The first one even contains whitespace and a newline.
readonly FOO=$'apjlljs ailsi \n ajlls\t éjij'
readonly BAR=ygnàgyààynygbjrbjrb
# Make a list of what you want to pass through SSH.
# (The “unset” is just in case someone exported
# an associative array with this name.)
unset -v VAR_NAMES
readonly VAR_NAMES=(
FOO
BAR
)
for name in "${VAR_NAMES[@]}"
do
printf '%s %s\0' "$name" "${!name}"
done | ssh [email protected] '
while read -rd '"''"' name value
do
export "$name"="$value"
done
# Check
printf "FOO = [%q]; BAR = [%q]\n" "$FOO" "$BAR"
'
Keluaran:
FOO = [$'apjlljs ailsi \n ajlls\t éjij']; BAR = [ygnàgyààynygbjrbjrb]
Jika Anda tidak perlu export
itu, Anda harus dapat menggunakan declare
bukannya export
.
Versi yang sangat disederhanakan (jika Anda tidak memerlukan ekstensibilitas, memiliki satu variabel untuk diproses, dll.) akan terlihat seperti:
$ ssh [email protected] 'read foo' <<< "$foo"