วิธีการรันคำสั่งแบบง่ายโดยพลการบน ssh โดยไม่ทราบว่าเชลล์ล็อกอินของผู้ใช้รีโมต
ssh มีคุณสมบัติที่น่ารำคาญเมื่อคุณเรียกใช้: ssh user@host cmd and "here's" "one arg" แทนที่จะเรียกใช้งานโดยที่cmdมีการขัดแย้งบนhostมันจะเชื่อมต่อcmdและขัดแย้งกับช่องว่างและรันเชลล์hostเพื่อตีความสตริงผลลัพธ์ (ฉันเดาว่านั่นเป็นสาเหตุที่เรียกว่าsshไม่ใช่sexec) ยิ่งกว่านั้นคุณไม่รู้ว่าเชลล์จะใช้อะไรในการตีความสตริงนั้นเพราะนั่นคือเชลล์ล็อกอินuserที่ไม่ได้รับประกันว่าจะเป็นบอร์นเหมือนที่มีคนใช้tcshเป็นเชลล์ล็อกอินfishอยู่และกำลังเพิ่มขึ้นเรื่อย ๆ มีวิธีแก้ไขไหม? สมมติว่าฉันมีคำสั่งเป็นรายการของอาร์กิวเมนต์เก็บไว้ในที่bashอาร์เรย์แต่ละที่อาจจะมีลำดับของไบต์ไม่ใช่ null ใด ๆ จะมีวิธีใดที่จะมีมันดำเนินการในhostขณะที่userในลักษณะที่สอดคล้องกันโดยไม่คำนึงถึงเปลือกเข้าสู่ระบบที่userเกี่ยวกับhost(ซึ่งเราจะถือว่าเป็นหนึ่งในตระกูลเชลล์ที่สำคัญของ Unix: Bourne, csh, rc / es, fish)? อีกข้อสันนิษฐานที่สมเหตุสมผลที่ฉันควรจะทำก็คือมีshคำสั่งhostให้ใช้งานได้ใน$PATHที่นั้นเข้ากันได้กับบอร์น ตัวอย่าง: cmd=( 'printf' '<%s>\n' 'arg with $and spaces' '' # empty $'even\n* * *\nnewlines' "and 'single quotes'" '!!' ) ฉันสามารถเรียกใช้ภายในเครื่องด้วยksh/ zsh/ bash/ yashเป็น: …