ฉันจะเปลี่ยนเส้นทางเอาต์พุตไปยัง cd ได้อย่างไร


11

เป็นไปได้ไหมที่จะเปลี่ยนทิศทางเอาต์พุตของคำสั่งไปcd? ตัวอย่างเช่นฉันค้นหาไดเรกทอรีโดยใช้locateและได้รับเส้นทางไป ตอนนี้แทนที่จะเขียนcdเส้นทางฉันสามารถเปลี่ยนเส้นทางไปยังlocateผลลัพธ์ได้cdหรือไม่

ฉันลองสิ่งนี้:

$ locate Descargas | grep Descargas$
/home/oliver/Descargas
$ locate Descargas | grep Descargas$ | cd
$ locate Descargas | grep Descargas$ > cd
$ locate Descargas | grep Descargas$ < cd
/home/oliver/Descargas
$ 

ไม่มีโชค. สิ่งนี้อาจไม่มีประโยชน์เป็นพิเศษ แต่ฉันอยากรู้

คำตอบ:


16

คุณต้องการทดแทนคำสั่งไม่ใช่การเปลี่ยนเส้นทาง:

cd "$(locate Descargas | grep -F 'Descargas$')"

บิตระหว่าง$(และ)จะถูกเรียกใช้เป็นคำสั่งและเอาท์พุท (ถอดของขึ้นบรรทัดใหม่สุดท้าย) จะถูกแทนที่ลงในคำสั่งโดยรวม

สิ่งนี้สามารถทำได้ด้วย 'back ticks' (“ `”):

cd "`locate Descargas | grep -F 'Descargas$'`"

โดยทั่วไปจะต้องการไวยากรณ์ไวยากรณ์แบบดอลล่าร์ดอลลาร์เพราะง่ายต่อการจัดการในสถานการณ์ซ้อน:

# contrived
cd "$(grep '^dir: ' "$(locate interesting-places | head -1)" | sed 's/^[^ ]*//')"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.