อย่าแสดงสแต็ก pushd / popd ในสคริปต์ bash หลายตัว (pushd / popd แบบเงียบ)


100

ทุกครั้งที่ฉันใช้ pushd หรือ popd มันจะพิมพ์สแตกไปยังเอาต์พุตมาตรฐาน จะไม่ทำอย่างไร?

ไม่อยากทำpushd > /dev/nullแต่ละครั้งเพราะมีสคริปต์โทรหากันเยอะมาก

บางทีการแทนที่ที่ดีอาจทำได้ แต่ฉันจะต้องแทนที่บิวด์อินเหล่านี้ในสคริปต์ของฉันเท่านั้นจากนั้นจึงเรียกคืนพฤติกรรมที่ถูกต้อง


3
ถ้ามีคนมาเจอคำถามนี้ต้องการที่จะเงียบที่เกิดขึ้นเพียงครั้งเดียวคุณสามารถแทนที่pushdและpopdด้วยและcd คือการขยายตัวหนอนที่ชุด$ OLDPWD cd ~-~-
Agustín Lado

@ AgustínLado cd -ยังใช้งานได้ ไม่แน่ใจว่าเวอร์ชันใดที่เข้ากันได้กับระบบต่างๆ
Shiplu Mokaddim

1
@ShipluMokaddim: หากไม่มีเครื่องหมายทิลเดอจะพิมพ์ชื่อโฟลเดอร์ (อย่างน้อยบน Ubuntu 18.04 ที่ทำงานบน WSL)
astraujums

ถ้าคุณมีลำดับของคำสั่งระหว่างที่cd some/pathและcd -หรือcd "${return_wd}"หรือสิ่งที่คล้ายกันพิจารณาการจัดกลุ่มคำสั่งในระหว่างในการทำงานและใช้ subshell (cd some/path; your_commands_here)เหมือน การนำทางไดเร็กทอรีกลับไปที่ PWD แบบเก่าจะบอกเป็นนัยที่ส่วนท้ายของ subshell ยังใช้แทนคำสั่ง
user4642212

คำตอบ:


143

คุณสามารถเพิ่ม

pushd () {
    command pushd "$@" > /dev/null
}

popd () {
    command popd "$@" > /dev/null
}

ที่ด้านบนสุดของแต่ละสคริปต์ นี่อาจเป็นจำนวนขั้นต่ำของงานที่จะใช้ในการแก้ปัญหาของคุณ


สิ่งที่ฉันต้องการ ... ขอบคุณ!
RonzyFonzy

หากคุณต้องการปิดเสียงข้อผิดพลาด (เช่นไม่มีไดเรกทอรีดังกล่าว) คุณสามารถใช้&>แทน>
MattSturgeon

4
โปรดใช้ความระมัดระวังในการปิดเสียงข้อผิดพลาด: คุณสามารถวินิจฉัยความล้มเหลวได้ยากในภายหลัง ตรวจสอบให้แน่ใจว่าคุณตรวจสอบรหัสส่งคืนที่ไม่ตกลงและตอบกลับตามนั้น
David Spillett

1
@ xdevs23 || exit $?เทียบเท่ากับ|| exit. เหมือนกันสำหรับreturn.
user4642212

1
@bmacnaughton ไม่มีข้อโต้แย้งใด ๆ ที่จำเป็น มันยอมรับ-nและทั้งตระกูลของอาร์กิวเมนต์-Nและ+N(สำหรับจำนวนเต็มN)
chepner

3

ในไฟล์. profile ของคุณ (สิ่งที่เคยเรียกว่าในระบบของคุณ) เพิ่ม:

pushd () {
    command pushd "$@" > /dev/null
}

popd () {
    command popd "$@" > /dev/null
}

export pushd popd

13
สิ่งนี้ส่งผลกระทบต่อทั้งระบบ ... โดยส่วนตัวแล้วไม่แนะนำวิธีนี้ .
Sean83

3

ใน zsh setopt PUSHDSILENTคุณสามารถ ใส่สิ่งนี้ใน~/.zshrcไฟล์.


1
หรือใช้popd -q(เงียบ).
rxw

5
popd ไม่มี-qตัวเลือก
MarekN

2
@MarekN: ความคิดเห็นก่อนหน้าของ "popd -q" อ้างถึง zsh ไม่ใช่ bash แม้ว่าคำถามเดิมจะถูกแท็กว่าต้องการคำตอบแบบทุบตีไม่ใช่ zsh
บี - แจ๊ส

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