แน่นอนคุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมภายในคำสั่งได้อย่างไรก็ตามคุณจะต้องระมัดระวังเกี่ยวกับการอ้างอิง: จำไว้ว่าเชลล์ของคุณจะแยกวิเคราะห์บรรทัดคำสั่งในเครื่องของคุณจากนั้นรีโมตเชลล์จะไปที่สตริง ได้รับ
หากคุณต้องการให้ตัวแปรรับค่าเดียวกันบนเซิร์ฟเวอร์ที่มีในไคลเอนต์ให้ลองSendEnv
ตัวเลือก:
ssh -o SendEnv = MYVAR server.example.com คำสั่งของฉัน
สิ่งนี้ต้องการการสนับสนุนจากเซิร์ฟเวอร์ ด้วย OpenSSH, /etc/sshd_config
ชื่อตัวแปรจะต้องมีอำนาจใน
หากเซิร์ฟเวอร์อนุญาตเฉพาะชื่อตัวแปรบางตัวเท่านั้นคุณสามารถแก้ไขได้ ตัวอย่างเช่นการตั้งค่าทั่วไปอนุญาตให้LC_*
ทำได้และคุณสามารถทำสิ่งต่อไปนี้:
ssh -o SendEnv = LC_MYVAR server.example.com 'MYVAR = $ LC_MYVAR; ยกเลิกการตั้งค่า LC_MYVAR; ส่งออก MYVAR; mycommand'
หากLC_*
ไม่มีตัวเลือกคุณสามารถส่งผ่านข้อมูลในTERM
ตัวแปรสภาพแวดล้อมซึ่งจะถูกคัดลอกเสมอ (อาจมีการจำกัดความยาว) คุณจะต้องตรวจสอบให้แน่ใจว่ารีโมตเชลล์ไม่ได้ จำกัดTERM
ตัวแปรเพื่อกำหนดประเภทเทอร์มินัลที่รู้จัก ผ่าน-t
ตัวเลือกเพื่อ ssh หากคุณไม่ได้เริ่มเปลือกโต้ตอบระยะไกล
env TERM = "ข้อมูลเพิ่มเติม: $ TERM" ssh -t server.example.com 'MYVAR = $ {TERM%: *}; ระยะ = $ {ระยะ ## *:}; ส่งออก MYVAR; mycommand'
ความเป็นไปได้อีกอย่างหนึ่งคือการกำหนดตัวแปรโดยตรงในคำสั่ง:
ssh -t server.example.com 'ส่งออก MYVAR = "ข้อมูลเพิ่มเติม"; mycommand'
ดังนั้นหากผ่านตัวแปรท้องถิ่น:
ssh -t server.example.com 'ส่งออก MYVAR =' "$ LOCALVAR '"'; mycommand'
อย่างไรก็ตามระวังปัญหาการอ้างอิง: ค่าของตัวแปรจะถูกแก้ไขโดยตรงในข้อมูลโค้ดของเชลล์ที่ดำเนินการทางด้านระยะไกล ตัวอย่างสุดท้ายข้างต้นถือว่า$LOCALVAR
ไม่มีคำพูดใด ๆ ( '
)