ฉันสามารถแก้ไขคำสั่งเทอร์มินัลเพื่อทำสิ่งเพิ่มเติมได้หรือไม่


8

ฉันได้ตรวจสอบชื่อแทนฟังก์ชั่น ... แต่ฉันไม่ได้รู้สึกพอใจอะไรเลย ให้ฉันให้คุณดูสถานการณ์สองอย่าง:

  • 95% ของจำนวนครั้งที่ฉันcdเข้าไปในโฟลเดอร์ฉันตามด้วยls คำสั่ง
  • 90% ของเวลาที่ฉันmkdirฉันcdเป็นตัวของตัวเอง

คุณได้รับความคิด

อะไรคือวิธีที่ "สะอาด" ในการผูกคำสั่งเหล่านั้นเข้าด้วยกัน (หรือฟังก์ชั่นอื่น ๆ )


5
ทำไมนามแฝงถึงไม่ทำงานสำหรับคุณ
Thorbjørn Ravn Andersen

2
ดังนั้นผล cd ของ mkdir ควรยึดติดกับ ls หรือไม่?
bmike

@bmike ไดเรกทอรีที่สร้างขึ้นใหม่จะว่างเปล่าดังนั้น ls จึงไม่พิมพ์อะไรเลย
Random832

@ Random832 คุณไม่มีธงใน ls แต่ที่สำคัญกว่านั้นคำถามของฉันจะแสดงให้เห็นว่าการเปลี่ยนแปลงนั้นเกิดขึ้นได้อย่างไร ฉันชอบนามแฝงมากกว่าฟังก์ชั่น แต่ทั้งคู่สามารถลองสิ่งที่ถาม
bmike

1
@ fd0 ฉันไม่สงสัยว่าชื่อแทนไม่ทำงาน ฉันถามว่าทำไม อาจมีวิธีแก้ไขปัญหาที่ง่ายกว่า
Thorbjørn Ravn Andersen

คำตอบ:


4

คุณสามารถใส่บรรทัดเหล่านี้ใน.zsrhcหรือของคุณ.bashrc

[ -z "$PS1" ] && return
function cd {
builtin cd "$@" && ls -F
}

ผลลัพธ์ ->

ป้อนคำอธิบายรูปภาพที่นี่

คำอธิบายจากคำตอบนี้ :

ก่อนหน้านี้ใน. bashrc ฉันมี: [-z "$ PS1"] && กลับมาและทุกอย่างหลังจากบรรทัดนั้นจะใช้กับเซสชันแบบโต้ตอบเท่านั้นดังนั้นสิ่งนี้จะไม่ส่งผลต่อวิธีการทำงานของซีดีในสคริปต์

ข้อมูลเพิ่มเติมจากความคิดเห็นนี้ :

[-z "$ PS1"] ตรวจสอบว่า $ PS (ตัวแปรพรอมต์แบบโต้ตอบ) เป็น "zero length" (-z) หากความยาวเป็นศูนย์หมายความว่าไม่ได้ตั้งค่าไว้ดังนั้น Bash จะต้องไม่ทำงานในโหมดโต้ตอบ ส่วน && กลับออกจากการจัดหา. bashrc ณ จุดนี้ภายใต้เงื่อนไขเหล่านี้

Btw ขอบคุณสำหรับคำถามมันเจ๋งจริงๆ :)

แก้ไข:

อีกวิธีคือการรวม ls ของคุณเข้ากับพรอมต์ของคุณ ฉันแน่ใจว่าคุณสามารถทำได้ด้วย OhMyZsh;)


1
โดยทั่วไปไม่ใช้ชื่อเดียวกับคำสั่งมาตรฐานเช่น cd ls rm ฯลฯ เนื่องจากคุณจะต้องใช้คำสั่งมาตรฐานเหล่านี้
user151019

@ Mark ฉันเห็นด้วยกับ 'rm -rf ~ / *' ^^ แต่สำหรับคำสั่ง cd มันไม่อันตรายจริงๆ และ Carles ต้องการ 'อัพเกรดคำสั่งที่มีอยู่ดังนั้น ...
StrawHara

ฉันต้องบอกว่าฉันใช้วิธีนี้นับตั้งแต่ @StrawHara เผยแพร่แล้วและฉันมีปัญหา 0 ข้อ ฉันต้องการให้ "มันเป็นอย่างไร" :) และมันมีประโยชน์จริงๆ นี่คือวิธีที่ฉันใช้ ( .zshrc
Carles Alcolea

13

ฉันมักจะทำคำสั่งใหม่นี้ ฉันคิดว่ามันจะเป็นเหตุผลที่จะรวมพวกเขาเป็นหนึ่งเดียว

go() {
    if [ -d "$1" ]; then
        cd "$1" && ls
    else
        mkdir -p "$1" && echo "Created directory $1" && cd "$1"
    fi
}

ฉันชอบความคิดของคุณที่รวมสิ่งเหล่านี้เข้าด้วยกัน! :-)
Martin Allert

5
คำตอบนี้เป็นคำที่สะอาดที่สุดเนื่องจากไม่รบกวนการกำหนดค่าเริ่มต้นของ cd / mkdir เมื่อใช้งานโดยสคริปต์
holroy

1
แน่นอน แต่ถ้าคุณตัดสินใจที่จะเริ่มใช้ภาษาโปรแกรม Go? : P
arxanas

@arxanas: คุณใช้ makefiles หรือไม่ ;-)
DevSolar

2
อืมฉันชอบอันนี้ แต่ถ้าคุณพิมพ์ชื่อผิดคุณตั้งใจสร้างไดเรกทอรีใหม่ มันยากที่จะตรวจสอบการลา (cd /.... หรือ../หรือบางสิ่งบางอย่าง) และลบไดเรกทอรีถ้ามันว่างเปล่า? ฉันหมายความว่าถ้าคุณออกจากไดเรกทอรีเพียงตรวจสอบว่ามันว่างเปล่าและถ้าเป็นเช่นนั้นลบมัน หากคุณไม่ต้องการสิ่งนั้นคุณยังสามารถใช้ cd แทน go ได้
Schwertspize

6

ฉันได้ลองเพิ่มสิ่งต่าง ๆ เหล่านี้ในของฉัน.bashrc:

cd() {
    command cd "$@"
    command ls
}

mkdir() {
    command mkdir "$@"
    command cd "$@"
}

อย่างไรก็ตามฉันพบว่าสิ่งนี้สามารถทำให้สคริปต์ยุ่งเหยิงที่ใช้คำสั่ง overridden และการจัดการตัวเลือกอาจมีความเปราะบาง (ตัวอย่างเช่นหากคุณต้องการส่ง-pต่อไปยังmkdirคำสั่งด้านบนก็จะถูกส่งไปยังcd) ดีกว่าคือการกำหนดชื่อแทนด้วยชื่ออื่น (พูดcหรือmcd)


1
การแทรก[ -z "$PS1" ] && returnที่ส่วนท้ายของไฟล์ก่อนหน้าที่จะได้รับการช่วยเหลือ
Carles Alcolea

5

ฉันคิดว่าฟังก์ชั่นเป็นวิธีที่จะไป สิ่งที่ต้องการ

chglist() {
    cd "$1" && ls
}

ตัวอย่างเช่น.

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