เปลี่ยนเส้นทาง stdout ผ่าน ssh


17

ฉันต้องการวิ่ง

something > file

บนระบบรีโมตผ่าน ssh แต่ถ้าฉันรัน

ssh host something > file

การเปลี่ยนเส้นทางจะดำเนินการในท้องถิ่นเป็น ssh etc > file

ฉันได้ลองใช้กับ'หรือ''หรือddไปป์|แทน แต่ฉันไม่สามารถใช้งานได้ สิ่งนี้สามารถทำได้?


คำตอบ:


11

ลอง:

ssh host 'something > file'

นี่คือการสาธิตวิธีการจัดการการเปลี่ยนเส้นทางท่อและเครื่องหมายคำพูด:

ssh host date -d yesterday \| awk "'{print $1}'" \> 'file" "with\ spaces.out'

ไปป์และการเปลี่ยนเส้นทางจะหลบหนีมากกว่าที่จะอยู่ในชุดคำพูดภายนอกโดยรวมลดความจำเป็นในการหลบหนีหนึ่งระดับของคำพูด เครื่องหมายคำพูดเดี่ยวสำหรับคำสั่ง AWK ได้รับการคุ้มครองโดยเครื่องหมายคำพูดคู่ที่ล้อมรอบคำพูดเหล่านั้น ชื่อไฟล์สามารถได้รับการคุ้มครองในลักษณะเดียวกัน แต่ที่นี่ฉันแสดงให้เห็นว่าคำพูดเดียวปกป้องคำพูดสองครั้งและการหลบหนี


ขอบคุณ - มันใช้งานได้!
franziskus

2
เนื่องจาก ssh ส่งผ่านส่วนหนึ่งของบรรทัดคำสั่งไปยังเชลล์ดังนั้นคุณไม่ต้องการsh -cส่วนนั้น
Jander

ถ้าคุณมีอัญประกาศคู่และอัญประกาศเดี่ยวในคำสั่งของคุณอยู่แล้ว ถ้ามันไม่ไกลเกินไปฉันแน่ใจว่าคนอื่นอยากรู้ว่า ...
เขาวงกต

1
@labyrinth: ฉันได้เพิ่มตัวอย่างเพื่อให้แนวคิดบางอย่างแก่คุณ โปรดสังเกตว่าโลคัลเชลล์ใช้ชุดด้านนอกสุดของคำพูดและรีโมตเชลล์ใช้ระดับถัดไป ในคำอื่น ๆ เช่น AWK ไม่เห็นคำพูดใด ๆ ในข้อโต้แย้งของมันตามที่ปรากฏ แต่มัน$1ได้รับการป้องกันจากการถูกมองเห็นโดยเปลือกเป็นตัวแปรเปลือก แต่มันจะไม่เป็นอย่างนั้นถ้าลำดับของคำพูดนั้นตรงกันข้าม
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

10

ง่ายกว่าแทนที่จะเป็น:

ssh host something > file

ทำ:

ssh host "something > file"

นี่ควรเป็นคำตอบที่ยอมรับได้เพราะมาเร็วกว่าคำตอบอื่น
phil294

ใช่คำตอบที่ยอมรับในปี 2010 นั้นไม่ค่อยดีนัก มันมีการเปลี่ยนแปลงในปี 2014 อาจจะตรงกับคำตอบนี้ unix.stackexchange.com/revisions/1631/1
Amala

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