(คำตอบนี้อาจดูซับซ้อนโดยไม่จำเป็น แต่ก็สามารถขยายได้อย่างง่ายดายและมีประสิทธิภาพสำหรับการเว้นวรรคและอักขระพิเศษเท่าที่ฉันรู้)
คุณสามารถป้อนข้อมูลได้โดยตรงผ่านอินพุตมาตรฐานของssh
คำสั่งและread
จากตำแหน่งระยะไกล
ในตัวอย่างต่อไปนี้
- อาร์เรย์ที่จัดทำดัชนีจะเต็มไปด้วย (เพื่อความสะดวก) พร้อมด้วยชื่อของตัวแปรที่มีค่าที่คุณต้องการดึงข้อมูลทางด้านรีโมต
- สำหรับตัวแปรเหล่านั้นแต่ละตัวเรากำหนดให้กับ
ssh
บรรทัดที่สิ้นสุดด้วยค่าว่างเพื่อให้ชื่อและค่าของตัวแปร
- ใน
shh
คำสั่งเองเราวนซ้ำบรรทัดเหล่านี้เพื่อเริ่มต้นตัวแปรที่ต้องการ
readonly FOO=$'apjlljs ailsi \n ajlls\t éjij'
readonly BAR=ygnàgyààynygbjrbjrb
unset -v VAR_NAMES
readonly VAR_NAMES=(
FOO
BAR
)
for name in "${VAR_NAMES[@]}"
do
printf '%s %s\0' "$name" "${!name}"
done | ssh user@somehost.com '
while read -rd '"''"' name value
do
export "$name"="$value"
done
# Check
printf "FOO = [%q]; BAR = [%q]\n" "$FOO" "$BAR"
'
เอาท์พุต:
FOO = [$'apjlljs ailsi \n ajlls\t éjij']; BAR = [ygnàgyààynygbjrbjrb]
หากคุณไม่จำเป็นต้องใช้export
คุณควรใช้declare
แทนexport
ไฟล์.
ฉบับง่ายจริงๆ (ถ้าคุณไม่จำเป็นต้องขยายที่มีตัวแปรเดียวกับกระบวนการอื่น ๆ ) จะมีลักษณะ:
$ ssh user@somehost.com 'read foo' <<< "$foo"