Thêm phím tắt lệnh vào / bin


8

Có cách nào để thêm các lệnh tùy chỉnh vào /bin?

Ví dụ, tôi sử dụng docker container lsrất nhiều, và muốn biến điều này thành một lệnh tắt, như thế nào dcls.

Nếu tôi thêm một tệp có tên dclsvào /binvà bên trong tệp, chỉ định lệnh chính xác docker container ls, tôi cho rằng điều này sẽ không hoạt động.

Cách đúng đắn, nếu có một, để làm một cái gì đó như thế này là gì?


6
Không thêm vào /bin, bạn có thể thêm vào ~/bin(một thùng trong thư mục của riêng bạn) hoặc /usr/local/bin(để chia sẻ với tất cả người dùng hệ thống của bạn, nhưng không can thiệp vào trình quản lý gói). Hoặc tốt hơn trong trường hợp này, để sử dụng một bí danh.
ctrl-alt-delor

Câu trả lời:


24

Một cách dễ dàng cho một phím tắt là xác định một alias

alias dcls='docker container ls'

Điều này sẽ thực thi docker container lskhi bạn nhập dclsvà lệnh aliasliệt kê các bí danh đã xác định của bạn. Để loại bỏ bí danh này sử dụng unalias dcls.

Nếu bạn sử dụng bash, bạn có thể lưu bí danh trong ~/.bashrchoặc ~/.bash_aliases.

Nếu bạn ~/.bash_aliaseskhông đọc khi khởi động, bạn có thể thêm dòng này vào ~/.bashrc:

[ -f ~/.bash_aliases ] && . ~/.bash_aliases

Cảm ơn Freddy! Tôi có phải tạo bí danh này mỗi khi máy chủ khởi động lại không? Hoặc nó bị ràng buộc với hồ sơ người dùng của tôi?
alex067

2
Bạn phải lưu nó trong tệp khởi động trình bao của người dùng ~/.bashrchoặc ~/.profilehoặc ... Nếu bạn không lưu bí danh thì nó sẽ bị mất khi bạn đăng xuất hoặc đóng thiết bị đầu cuối.
Freddy

Cảm ơn một lần nữa. Nếu chúng ta không có .bashrc hoặc .profile trong thư mục ~ thì sao?
alex067

1
Có thật không? Thật là một máy chủ kỳ quặc! Nếu bạn sử dụng bash, bạn có thể tạo nó bằng cách sử dụng echo "alias dcls='docker container ls'" >> ~/.bashrc, sau đó lấy nguồn bằng . ~/.bashrchoặc đăng xuất và đăng nhập lại.
Freddy

Chúc mừng sự giúp đỡ của bạn, làm cho nó hoạt động!
alex067

15

Trên thực tế, những gì bạn mô tả sẽ làm việc, với một vài lưu ý:

  1. Bạn chỉ có thể đặt docker container lsvào một tập tin gọi là /bin/dcls. Nhưng hành vi của điều đó có thể hơi phức tạp. Thật đáng tin cậy hơn một chút khi bắt đầu tập tin với một dòng gọi là một shebang tinh, vì vậy tập tin sẽ trông giống như
    #! / thùng / sh
    docker container ls
    trong đó xác định rằng tập tin là một tập lệnh shell.
  2. Trước khi bạn có thể chạy lệnh, bạn phải làm cho tệp có thể thực thi được bằng một lệnh như
    chmod + x / bin / dcls
    Bạn có thể cần phải root để làm điều này (nghĩa là chạy nó với sudo).
  3. Thực hiện theo hai bước trên và bạn sẽ có thể nhập dcls và nó sẽ làm docker container ls. Nhưng, nếu bạn gõ dcls -l foo, nó vẫn sẽ làm docker container ls. Nếu bạn muốn nó làm docker container ls -l foo, bạn nên thay đổi kịch bản để nói

    #! / thùng / sh
    docker container ls "$ @"
    trong đó xác định rằng bất kỳ đối số nào bạn nhập trên dclsdòng lệnh sẽ được truyền cùng với docker container lslệnh.

    Đương nhiên, có những điều phức tạp hơn bạn có thể làm với các đối số dòng lệnh.

Để ánh xạ một lệnh đơn giản → một lệnh đơn giản, không cần chia sẻ với người dùng khác, việc xác định bí danh ( như Freddy đề xuất ) hoặc hàm shell là đơn giản hơn . Các hàm phức tạp hơn thường được viết dưới dạng các tập lệnh; tức là các tệp văn bản có chứa các lệnh. Nhưng, nếu bạn không cần chia sẻ nó với những người dùng khác, việc sử dụng một binthư mục riêng sẽ phổ biến hơn .

$ cd                                     # (vào thư mục nhà của bạn) 
$ mkdir bin
Sau đó sao chép dclsvào $HOME/binvà thêm
xuất PATH = "$ HOME / thùng: $ PATH"
để của bạn ~/.bashrc.

Ngoài ra, việc đưa các tập lệnh cá nhân vào /usr/local/binvà để lại /bincác chương trình đi kèm với hệ thống là điều phổ biến .


Câu trả lời chính xác. Nếu tôi thêm nó vào bin như tôi đã đề cập, điều đó có ảnh hưởng đến tất cả người dùng đúng không?
alex067

Đúng; tất cả người dùng nhìn vào /bin,  /usr/binvà thường là các thư mục được chia sẻ như /usr/local/bin và đôi khi /opt, vì vậy các chương trình trong các thư mục đó có sẵn cho tất cả người dùng.
G-Man nói 'Phục hồi Monica'

1
Nếu bạn muốn chia sẻ với những người khác trên hệ thống của mình, hãy sử dụng /usr/local/binnó để không can thiệp vào trình quản lý gói.
ctrl-alt-delor

5
+1 để giới thiệu $HOME/bin. Bạn thực sự nên sử dụng này. Đây không chỉ là phạm vi phù hợp, mà còn giúp bạn cài đặt lại hệ thống (và giữ cho HOME) không bị mất lệnh tùy chỉnh.
allo

1
FWIW tôi sử dụng ~/.local/bin thay thế .
Sparhawk

0

Nếu chỉ dành cho bạn, một bí danh là tốt nhưng theo các tập lệnh toàn hệ thống tiêu chuẩn hệ thống tập tin Linux đi vào /usr/local/bin/, thì không /bin.

  1. Mặc dù nó chắc chắn sẽ hoạt động /bin, nhưng tốt hơn hết là tuân thủ các tiêu chuẩn, đặc biệt nếu phần mềm của bạn sẽ được triển khai tại các trang web của khách hàng.
  2. Nếu kịch bản của bạn là tùy chọn, nó sẽ đi vào /opt
  3. Kịch bản sẽ là:

    #!/bin/bash
    #
    # Version 1.0 DD 2019-05-04
    # dcls = docker container ls
    docker container ls "@0"
    if [[ $? -eq 0 ]]; then
      echo -e "Errors encountered..."
      exit 1
    fi
    
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.