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
sshbaris yang diakhiri null yang memberikan nama dan nilai variabel. - Dalam
shhperintah 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"