Đặt bí danh bash tạm thời khi vào thư mục


13

Đôi khi tôi muốn có các bí danh bash rất tùy chỉnh và có thể là các phím bấm khi tôi nhập vào một thư mục (có thể là một dự án mà tôi đã sử dụng để nhập nhiều lệnh từ CLI).

Giả sử khi tôi nhập một thư mục như "projectAlpha /" Tôi mong đợi một số bí danh tùy chỉnh như:

  • alias doTaskX='./app arg1 arg2...|filter arg1 arg2...'
  • ...

Nhiều hơn nó tôi đã nghĩ về:

  • Hiển thị một thông báo hữu ích hiển thị bí danh và các lệnh phổ biến
  • Hiển thị một số keybindings tùy chỉnh phổ biến cho dự án của tôi

Nhưng ngay khi tôi rời khỏi gốc của dự án, các cài đặt này sẽ không khả dụng.

Cách tiếp cận tốt nhất để làm điều đó ngày hôm nay là gì?


Bây giờ tôi đã nghĩ đến việc sử dụng một bí danh cho "cd" trong ~ / .bashrc, một bí danh để nhập vào một thư mục và bắt đầu một bash mới đọc .bashrc ẩn trong thư mục đó ...
gzinho

Câu trả lời:


14

Bash có biến đặc biệt PROMPT_COMMANDmà nội dung được thực thi mỗi lần sau khi lệnh được thực thi, vì vậy bạn có thể đặt nó như sau:

PROMPT_COMMAND='[[ "$PWD" = /tmp ]] && { alias ll=ls; echo "Remember: ll=ls"; } || { unalias ll 2>/dev/null; }'

Từ giờ mỗi lần bạn sẽ ở trong /tmpthư mục bí danh llsẽ được tạo và trong tất cả các thư mục khác, nó sẽ bị xóa.


Có lẽ thực tế hơn là thu thập tất cả các bí danh của bạn và các công cụ khác trong một chức năng (giả sử makealias) và tất cả các unalias trong chức năng khác makeunaliasmà bạn có thể chạy tùy thuộc vào nhu cầu của bạn, đại loại như

PROMPT_COMMAND='[[ "$PWD" = /tmp ]] && makealias || makeunalias 2>/dev/null'

Lưu ý rằng chuyển hướng stderr chỉ xuất hiện để ngăn chặn một số vô dụng trong cảnh báo trường hợp này.


ty, tôi sẽ thử nó +1 (nếu tôi có thể lên)
gzinho

1
@ user3697611 Bạn không cần bất kỳ danh tiếng nào để chấp nhận câu trả lời cho câu hỏi của riêng bạn. Nhấp vào dấu kiểm bên cạnh câu trả lời.
Barmar
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.