SSH และคำสั่งดำเนินการ


0

ฉันพยายามที่จะ ssh เข้าสู่เซิร์ฟเวอร์และดำเนินการหลายคำสั่งในโฮสต์

ฉันจัดการกับสิ่งต่อไปนี้และทำงานได้อย่างสมบูรณ์

ssh -t -X thor 'cd /stmp/username; ls -rtl ; rm ~/tmp.file; tcsh -l'

ขณะนี้ฉันกำลังพยายามขยายคำสั่งเพื่อเปลี่ยนไดเรกทอรีเป็นโฟลเดอร์ล่าสุดที่แสดงใน / stmp / ชื่อผู้ใช้ /

ประการแรกฉันทดสอบคำสั่งที่ฉันต้องการใช้ในเทอร์มินัลและใช้งานได้ มันจะไปที่โฟลเดอร์ล่าสุดในรายการไดเรกทอรี คำสั่งคือ

cd `ls -rtl | cut -d' ' -f9 | tail -1`

ตอนนี้ฉันกำลังพยายามรวมคำสั่งด้านบนเข้ากับคำสั่ง ssh แต่มันไม่ทำงาน

ssh -t -X thor 'cd /stmp/username; cd `ls -rtl |cut -d' ' -f9 | tail -1` ; rm ~/tmp.file; tcsh -l'

มีบางอย่างผิดปกติกับคำสั่งของฉันหรือไม่?


คุณมี 2 ชุด คำพูดเดียว ห่อคำสั่งด้วยเครื่องหมายคำพูดคู่เช่น ssh -t -X thor "cd ... " เพื่อรักษาคำพูดเดียวที่รวมไว้สำหรับพื้นที่ของคุณหรือหลบหนีพื้นที่
David C. Rankin

@ DavidC.Rankin นี่น่าจะเป็นคำตอบฉันคิดว่า
Kamil Maciorowski

ใช่มันเป็นเรื่องง่าย แต่ฉันสามารถเขียนได้ ขอบคุณ
David C. Rankin

@ DavidC.Rankin เปลี่ยนเป็นอัญประกาศคู่ให้ข้อผิดพลาดใหม่ ตอนนี้รายการคำสั่ง ls ไดเรกทอรีปัจจุบันที่ฉันดำเนินการคำสั่งแทน ls ในไดเรกทอรีของโฮสต์ thor / stmp / ชื่อผู้ใช้
nabilishes

คำตอบ:


2

เมื่อคำสั่งของคุณทำงานจากบรรทัดคำสั่งเช่น

cd `ls -rtl | cut -d' ' -f9 | tail -1`

ไม่มีปัญหาในการอ้างอิง อย่างไรก็ตามเมื่อคุณพยายามเพิ่มสิ่งนั้นลงใน ssh คำสั่งคุณห่อของคุณ ssh คำสั่งใน คำพูดเดียว แต่คุณได้รวมไว้ด้วย คำพูดเดียว ภายในคำสั่งของคุณเพื่อใส่ ' ' (ช่องว่าง) ด้วย cut คำสั่ง - ทำให้เกิดปัญหา

ทางออกที่ง่ายที่สุดคือออกจากข้อความของคุณ ssh คำสั่งไปที่ คำพูดเดียว และเปลี่ยนคำพูดรอบ ๆ space ไปยัง ราคาสองครั้ง ภายในมันเช่น

ssh -t -X thor 'cd /stmp/username; cd `ls -rtl |cut -d" " -f9 | tail -1` ; rm ~/tmp.file; tcsh -l'

(ไม่มีผลลัพธ์เกี่ยวกับตัวแปรหรือการขยายเส้นทาง)

ทำการเปลี่ยนแปลงและแจ้งให้เราทราบหากคุณมีคำถามเพิ่มเติม

บันทึก: คุณควรหลีกเลี่ยง คำสั่งเปลี่ยนตัว การใช้ backticks ในความโปรดปรานของ $(...) - อ่านได้มากขึ้น


วิธีนี้ใช้ได้ผล ขอบคุณ คุณพูดถึงในโพสต์ที่ฉันควรหลีกเลี่ยงการใช้ backticks คุณสามารถแสดงตัวอย่างโดยใช้ $ (.. )
nabilishes

ใช้ $(ls -rtl |cut -d" " -f9 | tail -1) แทน `ls -rtl |cut -d" " -f9 | tail -1`
David C. Rankin

ฉันแค่อยากรู้ว่าทำไม ssh -t -X thor "cd ... " ไม่ทำงาน, ไม่เป็นผล?
nabilishes

1
@ คงมันทำให้ backticks ดำเนินการในท้องถิ่น
Kamil Maciorowski

เนื่องจากเครื่องหมายอัญประกาศคู่ด้านนอกไม่ได้ป้องกันการขยายคำสั่งจึงถูกขยายแบบโลคอล - การห่อคำพูดเดี่ยวจะป้องกันการขยายตัวทั้งหมด
David C. Rankin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.