将命令快捷方式添加到/ bin


8

有什么方法可以向其中添加自定义命令/bin

例如,我使用docker container ls了很多东西,并且想把它变成一个快捷命令,例如dcls

如果我添加一个名为文件dcls/bin该文件中,指定具体的命令docker container ls,我认为这是行不通的。

如果有的话,做这样的正确方法是什么?


6
不要添加到/bin,您可以添加到~/bin(您自己目录中的bin)或添加到/usr/local/bin(与系统的所有用户共享,但不干扰程序包管理器)。在这种情况下,最好使用别名。
ctrl-alt-delor

Answers:


25

快捷方式的一种简单方法是定义一个 alias

alias dcls='docker container ls'

这将docker container ls在您输入dcls并且命令alias列出您定义的别名时执行。要删除此别名,请使用unalias dcls

如果您使用bash,则可以将别名保存在~/.bashrc或中~/.bash_aliases

如果~/.bash_aliases启动时未读取您的信息,则可以将此行添加到您的~/.bashrc

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

谢谢弗雷迪!每次服务器重新启动时,我都必须创建此别名吗?还是绑定到我的用户个人资料?
alex067 '19

2
您必须将其保存在用户的外壳程序启动文件中,~/.bashrc或者~/.profile或者...如果您不保存别名,则在注销或关闭终端时它将丢失。
弗雷迪

再次感谢。如果我们的〜文件夹中没有.bashrc或.profile怎么办?
alex067 '19

1
真?多么奇怪的服务器!如果您使用bash,则可以使用创建它echo "alias dcls='docker container ls'" >> ~/.bashrc,然后使用. ~/.bashrc或登出它作为源,然后注销并再次登录。
弗雷迪,

为您的帮助加油,让它奏效!
alex067 '19

15

实际上,您所描述的内容会起作用,但需要注意以下几点:

  1. 您可以简单地将docker container ls文件放入/bin/dcls。但是,其行为可能会有些复杂。以名为“ shebang”的行开始文件更加可靠,因此文件看起来像
    #!/ bin / sh
    docker容器ls
    它指定文件是一个shell脚本。
  2. 在运行命令之前,必须使用以下命令使文件可执行
    chmod + x / bin / dcls
    您可能需要具有root才能执行此操作(即,使用来运行它sudo)。
  3. 请按照上面的两个步骤操作,您将可以输入文字dcls 并且可以输入文字docker container ls。但是,如果您键入dcls -l foo,它仍然会起作用docker container ls。如果要执行此操作docker container ls -l foo,则应将脚本更改为

    #!/ bin / sh
    docker容器ls“ $ @”
    它指定您在dcls命令行上键入的所有参数都应传递给docker container ls命令。

    自然地,您可以使用命令行参数执行更复杂的操作。

对于一个简单命令→一个简单命令的映射,该映射不需要与其他用户共享,则定义别名(如Freddy所建议的)或shell函数更为简单。更复杂的功能通常被编写为脚本。即,包含命令的文本文件。但是,如果您不需要与其他用户共享它,则使用私有bin目录更为常见。

$ cd                                     #(到您的主目录) 
$ mkdir bin
然后复制dcls$HOME/bin,并添加
export PATH =“ $ HOME / bin:$ PATH”
给你~/.bashrc

另外,通常将个人脚本放入/usr/local/bin,然后留给/bin系统随附的程序。


好答案。如果像我提到的那样将其添加到bin中,那会影响所有用户正确吗?
alex067 '19

是; 所有用户都在/bin/usr/bin和(通常)共享目录中查找,  例如/usr/local/bin 和有时/opt,因此这些目录中的程序可供所有用户使用。
G-Man说'Resstate Monica''19

1
如果您要与系统上的其他人共享,请使用/usr/local/bin它,以免干扰程序包管理器。
ctrl-alt-delor

5
+1推荐$HOME/bin。您应该真正使用它。这不仅是正确的范围,而且在重新安装系统(并保留HOME)以免丢失自定义命令时会有所帮助。
异体

1
我用FWIW ~/.local/bin 代替
Sparhawk

0

如果只是适合您,则可以使用别名,但是根据Linux Filesystem Hierarchy Standard的要求,本地系统范围的脚本应放在/usr/local/bin/,而不是/bin

  1. 尽管它肯定会起作用/bin,但是最好保持标准,尤其是如果软件要在客户的站点上部署。
  2. 如果您的脚本是可选的,则应输入 /opt
  3. 脚本本身将是:

    #!/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
    
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.