Chạy lệnh khác trước khi chạy lệnh người dùng muốn chạy


9

Giả sử tôi muốn sửa đổi hành vi ban đầu của lscông cụ theo cách này:

$ ls
Hello World
file1 file2 ...

Tôi có thể làm cái này như thế nào?

Khi chạy lstôi muốn chạy một lệnh khác, hãy nói echo "Hello World!".

Giải pháp nhanh chóng tôi thấy là sử dụng bí danh:

alias orig_ls="ls"
alias ls='echo "Hello World!"'

Tuy nhiên, đây không phải là một giải pháp thực sự vì khi tôi chạy orig_lsnó sẽ xuất ra "Hello World!".


Đặt một ls khác trong đường dẫn riêng của người dùng và sử dụng cái này để móc bản gốc.
peterh - Phục hồi Monica

Câu trả lời:


12

Đôi khi một bí danh không đủ mạnh để dễ dàng làm những gì bạn muốn, vì vậy đây là một cách mà không cần sử dụng chúng.

Trong một số tệp có nguồn gốc khi trình bao của bạn bắt đầu (ví dụ .bashrc), hãy thêm chức năng sau:

ls () {
    echo "Hello world!"
    command ls "$@"
}

Không giống như một bí danh, một chức năng có thể tái diễn. Đó là lý do tại sao command lsđược sử dụng thay vì ls; nó báo cho shell của bạn sử dụng thực tế lsthay vì hàm bạn vừa xác định.


2
Thật. Giải pháp này quy mô tốt hơn. +1
PythonNut

Sự commandthay thế cho OS X là gì?
Ionică Bizău

@ IonicăBizău Tôi không có ý tưởng commandnào không hoạt động: / Tôi không có ý tưởng và tôi không có máy Mac để kiểm tra, xin lỗi.
undergroundmonorail

9

Bạn không được quên gọi ls:

alias ls='echo "Hello World!"; ls'

Hà! Tôi cho rằng điều này sẽ tạo ra một chu kỳ vô hạn! Nhưng tại sao nó không tạo ra một vòng lặp vô hạn?
Ionică Bizău

1
Thay vào đó, bạn có thể thử tiếng vang của bí danh "Xin chào thế giới!"; / usr / bin / ls '
jamesqf

5
@ IonicăBizău bất kỳ "quy tắc mở rộng bí danh" nào chỉ được sử dụng một lần.
David Z

Sẽ tham gia hai với một & cũng làm việc? Điều đó cũng sẽ đảm bảo rằng lệnh của người dùng chỉ chạy nếu tùy chỉnh hoạt động, phải không?
Vụ kiện của Quỹ Monica

@QPaysTaxes Bạn &thực sự có thể sử dụng nhưng tôi không nhận được đối số bạn đưa ra từ đó.
Hauke ​​Laging
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.