2010-12-14 1 views
79

Tôi muốn tạo ra một bí danh trong bash như thế này:Bí danh với biến trong bash

alias tail_ls="ls -l $1 | tail" 

Như vậy, nếu loại ai đó:

tail_ls /etc/ 

nó sẽ chỉ hiển thị 10 file cuối cùng trong thư mục .

Nhưng $1 dường như không hoạt động đối với tôi. Có cách nào tôi có thể giới thiệu các biến trong bash.

+1

thông số hỗ trợ csh và tcsh như '$ 1' trong bí danh; bash không. –

Trả lời

129

Tôi muốn tạo ra một chức năng cho rằng, chứ không phải là bí danh, và sau đó xuất khẩu nó, như thế này:

function tail_ls { ls -l "$1" | tail; } 

export -f tail_ls 

Note -f chuyển sang export: nó nói với nó rằng bạn đang xuất khẩu một hàm. Đặt cái này vào số .bashrc của bạn và bạn tốt để đi.

+4

Thường không cần thiết để xuất một hàm. –

+3

@ Dennis, vâng, bạn là đúng, cho một bí danh đơn giản mà sẽ không cần thiết, nhưng nó là có chỉ trong trường hợp bạn muốn sử dụng nó trong một số vỏ/quá trình có nguồn gốc. –

+13

Trong bash bạn cần phải đặt dấu chấm phẩy ';' trước khi đóng cha mẹ '}' khi thu gọn một hàm thành một dòng trên. 'function tail_ls {ls -l" $ 1 "| tail} 'không hoạt động mà không có kết thúc như' đuôi; } '. –

1

tail_ls() { ls -l "$1" | tail; }

+1

Vui lòng sửa lỗi cú pháp (thiếu ';' trước '}') và báo giá kép '$ 1' để hỗ trợ tên tệp bằng khoảng trống được nhúng và các siêu ký tự shell khác. – mklement0

28

Các giải pháp của @ châm ngôn-sloyko không hiệu quả, nhưng nếu như sau:

  1. Trong ~/.bashrc thêm:

    sendpic() { scp "[email protected]" [email protected]:/www/misc/Pictures/; } 
    
  2. Lưu tập tin và tải lại

    $ source ~/.bashrc 
    
  3. Và thực hiện:

    $ sendpic filename.jpg 
    

nguồn gốc: http://www.linuxhowtos.org/Tips%20and%20Tricks/command_aliases.htm

+2

@fedorqui cảm ơn sự giúp đỡ của bạn. – jruzafa

+0

làm việc như quyến rũ –

+0

@jruzafa, Trong bối cảnh đó, bạn khẳng định rằng 'Giải pháp của các tác phẩm maxim-sloyko không hoạt động' trong khi giải pháp của anh ta/cô ấy làm việc cho bản thân mình. –

1

Nếu bạn đang sử dụng vỏ Fish (từ http://fishshell.com) thay vì bash, họ viết các chức năng một chút khác nhau.

Bạn sẽ muốn thêm một cái gì đó như thế này để ~/.config/fish/config.fish của bạn mà là tương đương với việc bạn ~/.bashrc

function tail_ls 
    ls -l $1 | tail 
end 
7
alias tail_ls='_tail_ls() { ls -l "$1" | tail ;}; _tail_ls' 
+0

Đó là một cách tiếp cận sáng tạo. Chắc chắn giải quyết vấn đề nếu họ ** cần ** sử dụng bí danh thay vì chức năng… Tôi nghĩ tôi thích một hàm nếu đó là một lựa chọn thay thế, nhưng một giải pháp rất gọn gàng để ghi nhớ khi tình huống đúng phát sinh ! – lagweezle

1

Bạn có thể xác định $1 với set, sau đó sử dụng bí danh của bạn như mong đợi:

$ alias tail_ls='ls -l "$1" | tail' 
$ set mydir 
$ tail_ls