Tôi có thể sửa đổi một lệnh đầu cuối để làm công cụ bổ sung?


8

Tôi đã xem xét các bí danh, chức năng ... nhưng tôi không nghĩ ra được điều gì thỏa mãn. Để tôi cho bạn một vài tình huống:

  • 95% số lần tôi cdvào một thư mục, tôi theo dõi bằng một ls lệnh.
  • 90% số lần mà tôi mkdir, tôi cdvào đó.

Bạn có được ý tưởng.

Điều gì sẽ là cách "sạch nhất" để liên kết các lệnh đó lại với nhau (hoặc chức năng khác)?


5
Tại sao bí danh không làm việc cho bạn?
Thorbjørn Ravn Andersen

2
Vì vậy, kết quả cd của mkdir sau đó giải quyết trên ls?
bmike

@bmike Vâng, một thư mục mới được tạo sẽ trống, vì vậy ls không in gì cả.
Random832

@ Random832 bạn cho rằng không có cờ trên ls, nhưng quan trọng hơn là câu hỏi của tôi sẽ tiết lộ mức độ thay đổi / nặng tay như thế nào là mong muốn. Tôi thích bí danh hơn các chức năng, nhưng cả hai đều có thể thử những gì được yêu cầu.
bmike

1
@ fd0 Tôi không nghi ngờ rằng bí danh không hoạt động. Tôi đang hỏi tại sao. Có thể có một giải pháp đơn giản hơn cho vấn đề.
Thorbjørn Ravn Andersen

Câu trả lời:


4

Bạn có thể đặt những dòng này trong .zsrhchoặc.bashrc

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

Kết quả ->

nhập mô tả hình ảnh ở đây

Giải thích từ câu trả lời này :

Trước đó,

Thông tin thêm từ bình luận này :

[-z "$ PS1"] kiểm tra xem $ PS (biến dấu nhắc tương tác) có "độ dài không" (-z) không. Nếu nó có độ dài bằng 0, điều này có nghĩa là nó chưa được đặt, do đó Bash không được chạy trong chế độ tương tác. Phần && return return thoát khỏi nguồn .bashrc tại thời điểm này, trong các điều kiện này.

Btw, cảm ơn vì câu hỏi, nó thực sự rất tuyệt :)

Biên tập :

Một giải pháp khác là tích hợp ls của bạn vào dấu nhắc của bạn; Tôi chắc chắn rằng bạn có thể làm điều đó với OhMyZsh;)


1
Nói chung, không sử dụng cùng tên với các lệnh tiêu chuẩn như cd ls rm, v.v. vì bạn sẽ cần sử dụng các lệnh tiêu chuẩn này
user151019

@Mark Tôi đồng ý với 'rm -rf ~ / *' ^^ Nhưng đối với lệnh cd, nó không thực sự nguy hiểm. Và Carles muốn 'nâng cấp các lệnh hiện có', vì vậy ...
StrawHara

Tôi phải nói rằng tôi đã sử dụng giải pháp này kể từ khi @StrawHara xuất bản nó và tôi đã gặp phải 0 vấn đề. Tôi muốn cung cấp "làm thế nào nó đi" :) Và nó thực sự hữu ích; đây là cách tôi sử dụng nó (.zshrc): i.imgur.com/WHpROIE.png
Carles Alcolea

13

Tôi có xu hướng tạo một lệnh mới cho việc này. Tôi nghĩ rằng nó thậm chí sẽ hợp lý khi kết hợp chúng thành một.

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

Tôi thích ý tưởng của bạn kết hợp những cái này! :-)
Martin Allert

5
Câu trả lời này cũng là sạch nhất vì nó không làm phiền định nghĩa mặc định của cd / mkdir khi được sử dụng bởi các tập lệnh
holroy

1
Chắc chắn, nhưng nếu bạn quyết định bắt đầu sử dụng ngôn ngữ lập trình Go thì sao? : P
arxana

@arxanas: Bạn dùng makefiles? ;-)
DevSolar

2
hmmm tôi thích cái này nhưng nếu bạn vô tình gõ nhầm tên, bạn tạo một thư mục mới. Là nó khó có thể thực hiện một kiểm tra về nghỉ (cd /.... hay ../hay cái gì) và xóa các thư mục nếu nó trống rỗng? Tôi có nghĩa là nếu bạn để lại một thư mục chỉ cần kiểm tra nếu nó trống và nếu vậy, xóa nó. nếu bạn không muốn điều đó, bạn vẫn có thể sử dụng cd thay vì đi
Schwertspize

6

Tôi đã thử thêm những thứ như thế này vào .bashrc:

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

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

Tuy nhiên, tôi thấy rằng điều này có thể làm rối các tập lệnh sử dụng các lệnh bị ghi đè và việc xử lý tùy chọn có thể rất mong manh (ví dụ: nếu bạn muốn chuyển -psang mkdirlệnh trên , nó cũng được chuyển sang cd). Tốt hơn là chỉ định nghĩa các bí danh với các tên khác nhau (nói, choặc mcd).


1
chèn [ -z "$PS1" ] && returnvào cuối tập tin, trước các chức năng đó, sẽ giúp
Carles Alcolea

5

Tôi nghĩ rằng các chức năng là con đường để đi. Cái gì đó như

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

làm ví dụ

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.