Làm cách nào để đặt bí danh trên cơ sở mỗi thư mục?


18

Giả sử bạn có một bí danh go, nhưng muốn nó làm những việc khác nhau trong các thư mục khác nhau?

Trong một thư mục, nó sẽ chạy cmd1, nhưng trong một thư mục khác, nó sẽ chạycmd2

Nhân tiện, tôi đã có một bí danh để chuyển sang các thư mục trên rồi, vậy có thể nối thêm gán gobí danh cho foobí danh không?

alias "foo=cd /path/to/foo"

Làm việc trong bash (?) Trên OSX.


1
Đây là những gì makefiles dành cho.
itbruce

Câu trả lời:


16

Nó không hoàn toàn chắc chắn những gì bạn đang hỏi, nhưng một bí danh chỉ mở rộng đến những gì trong bí danh. Nếu bạn có hai bí danh, bạn có thể nối các lệnh khác nhau, thậm chí là bí danh.

alias "foo=cd /path/to/foo; go"
alias "foo2=cd /path/to/foo2; go"

Trong mọi tình huống khác, bạn có thể chỉ định một chức năng trong .bashrc

function go ()
{
    if [ "$PWD" == "/path/to/foo" ]; then
       cmd1
    elif [ "$PWD" == "/path/to/go" ]; then
       cmd2
    fi;
}

Trong trường hợp bạn có nhiều lựa chọn hơn, bạn có thể sử dụng cấu trúc trường hợp tốt hơn.


4

Tôi có cảm giác bạn rất "hướng thư mục", và trong trường hợp đó, điều này có thể giúp tâm lý của bạn tốt hơn.

(Nhưng thành thật mà nói, tôi nghĩ rằng đây hoàn toàn là một ý tưởng tồi, bạn muốn các lệnh trở thành toàn cầu.)

Trong .bashrc, đặt alias go="./.cmd"(sau đó source ~/.bashrc).

Sau đó, trong mỗi thư mục như vậy, đặt một tập lệnh được gọi .cmd, sau đó chmod +x .cmd, sau đó chỉ cần golàm việc của bạn.


2
Đó là rất nhiều công việc ... đây là trường hợp sử dụng: Khi chạy thử nghiệm, tôi muốn bí danh rspec-all để chạy các thử nghiệm nhất định. Nhưng thử nghiệm nào phụ thuộc vào dự án. Và điều đó được xác định bởi thư mục.
B Bảy

2
Những gì tôi có thể thấy, bạn có hai tùy chọn, hoặc sử dụng một hàm (như @Bernhard được mô tả ở trên) và nhánh tùy thuộc vào thư mục (giống như ông nói), hoặc, bạn có thể đặt các tham số trong các thư mục. Hãy nghĩ về nó, nó không phải là tập lệnh, bạn chỉ cần đặt một tệp ( touch .TESTNO; echo 2 > .TESTNO) vào mỗi thư mục, và sau đó, trong chức năng của bạn, hãy tìm tệp đó và phân nhánh theo số kiểm tra tệp .TESTNO chứa đựng. Mặc dù không khó chút nào, nhưng có lẽ bạn không thể sử dụng bí danh cho việc này; bạn phải sử dụng một chức năng.
Emanuel Berg

2

Tôi đang làm việc trên một dự án hoàn thành điều đó. Kiểm tra xem nó: localalias .

Đây là bản demo:

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

Hài hước lắm, tôi thực sự đã sử dụng gonhư một ví dụ trong bản demo. Tôi không hiển thị các thư mục chuyển đổi (một cái gì đó tôi nên thay đổi về bản demo) nhưng các chức năng với lalệnh thực sự là cục bộ đối với thư mục mà chúng được xác định.


1
function go() {
  if [ ! -e "./.cmd1" ]
    then command go -a $1
    else command go -b $1
  fi
}

Điều tương tự, nhưng giả sử "go" là một lệnh bạn muốn có chức năng khác nhau trong một thư mục cụ thể.


1

Nếu bạn thêm chức năng sau vào .bashrc của bạn

function cd () { 
  builtin cd "$@" && [[ -f .aliases ]] && . .aliases
  return 0
}

Mỗi khi bạn cd vào một thư mục có tệp .aliases, nó sẽ có nguồn gốc.

Cẩn thận với bảo mật nếu người khác có thể tạo tập tin trên máy của bạn.

Với thủ thuật này, bí danh không bao giờ bị xóa nhưng bạn có thể viết bao nhiêu mã tùy thích trong hàm.

ondir sử dụng thủ thuật này và có rất nhiều chuông và còi.

http://swapoff.org/ondir.html#d Download


Trong khi tôi nghĩ điều này là thông minh thì có vẻ như nó nguy hiểm vì nó dựa vào .bashrc. ( cronVí dụ, điều này sẽ không hoạt động ).
ctbrown

Tôi không chắc có gì nguy hiểm về bashrc. Tôi tin rằng đây là nơi chuẩn / đúng cho các bí danh. Đó là trong bản chất của môi trường mà họ khác nhau. Đưa ra câu hỏi, một môi trường khác nhau là những gì được yêu cầu. Không có gì ngăn cản bạn tìm nguồn cung ứng người dùng .bashrc trong cron nếu bạn muốn cron có một môi trường tương tự . NB cron nên luôn luôn được dự kiến ​​sẽ hành xử khác với vỏ tương tác do sử dụng isatty và chums.
teknopaul

Đúng, không có gì nguy hiểm về bản thân bashrc. Vấn đề là bạn không có cách nào để đảm bảo rằng quá trình đang thay đổi thành thư mục sẽ nguồn bashrc. Đó là một điều nếu đó là phiên tương tác của bạn. Nó hoàn toàn khác nếu thư mục đó được chia sẻ giữa những người dùng và các quy trình có thể hoặc không thể sử dụng bash shell. .bash_aliases là vị trí ưa thích cho các bí danh bash trên một số hệ thống.
ctbrown
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.