Không hiển thị ngăn xếp pushd / popd trên nhiều tập lệnh bash (pushd / popd yên tĩnh)


94

Mỗi lần tôi sử dụng pushd hoặc popd, nó sẽ in chồng lên đầu ra tiêu chuẩn. Làm thế nào để không làm như vậy?

Tôi không muốn làm pushd > /dev/nullmỗi lần vì tôi có rất nhiều kịch bản gọi nhau.

Có thể một thao tác ghi đè tốt sẽ làm được điều đó, nhưng tôi sẽ chỉ cần ghi đè các nội trang này trong tập lệnh của mình và sau đó khôi phục lại hành vi chính xác.


2
Nếu ai đó gặp câu hỏi này muốn im lặng một lần xuất hiện, bạn có thể thay thế pushdpopdbằng cdcd ~-. ~-là một mở rộng dấu ngã được đặt thành $ OLDPWD .
Agustín Lado

@ AgustínLado cd -cũng hoạt động. Không chắc phiên bản nào tương thích hơn với nhiều loại hệ thống.
Shiplu Mokaddim

1
@ShipluMokaddim: Không có dấu ngã, nó sẽ in tên thư mục (ít nhất là trên Ubuntu 18.04 chạy trên WSL).
astraujums

Nếu bạn có một chuỗi lệnh giữa a cd some/pathvà a cd -hoặc cd "${return_wd}"hoặc cái gì đó tương tự, hãy xem xét nhóm các lệnh ở giữa thành một hàm và sử dụng một vỏ con như (cd some/path; your_commands_here). Điều hướng thư mục trở lại PWD cũ được ngụ ý ở cuối vỏ con. Cũng có tác dụng thay thế lệnh.
user4642212

Câu trả lời:


134

Bạn có thể thêm

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

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

lên đầu mỗi tập lệnh. Đây có lẽ là khối lượng công việc tối thiểu cần thiết để giải quyết vấn đề của bạn.


Chính xác những gì tôi cần ... Cảm ơn bạn!
RonzyFonzy

Nếu bạn muốn lỗi im lặng (ví dụ như không có thư mục đó) quá, sau đó bạn có thể sử dụng &>thay vì>
MattSturgeon

4
Hãy cẩn thận khi tắt tiếng lỗi: bạn có thể tạo ra lỗi khó chẩn đoán vào một ngày sau đó. Đảm bảo rằng bạn kiểm tra mã trả lại không OK và phản hồi mã đó cho phù hợp.
David Spillett

1
@ xdevs23 || exit $?tương đương với chỉ || exit. Tương tự cho return.
user4642212

1
@bmacnaughton Nó không có bất kỳ đối số bắt buộc nào ; nó chấp nhận -nvà toàn bộ họ đối số -N+N(đối với một số nguyên N).
chepner

3

Trong tệp .profile của bạn (cái mà nó được gọi trong hệ thống của bạn), hãy thêm:

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

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

export pushd popd

13
Điều này ảnh hưởng đến toàn bộ hệ thống ... cá nhân tôi không khuyến khích cách này. .
Sean83

3

Trong zsh bạn có thể setopt PUSHDSILENT. Đặt cái này vào của bạn ~/.zshrc.


1
Hoặc sử dụng popd -q(yên tĩnh).
rxw 18/12/18

5
popd không có -qtùy chọn
MarekN

2
@MarekN: nhận xét trước đó của "popd -q" đề cập đến zsh, không phải bash, mặc dù câu hỏi ban đầu được gắn thẻ là muốn câu trả lời bash, không phải zsh.
b-jazz

Đây là một nhận xét hay hoặc một tiếp tuyến cho một câu trả lời, nhưng nó không thuộc về một câu trả lời độc lập cho một câu hỏi không được hỏi zsh.
chepner
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.