Adicionando atalhos de comando ao / bin

8

Existe alguma maneira de adicionar comandos personalizados /bin?

Por exemplo, eu uso docker container lsmuito e gostaria de transformar isso em um comando de atalho, como dcls.

Se eu adicionar um arquivo nomeado dclspara /bine dentro do arquivo, especifique o comando exato docker container ls, presumo que isso não funcione.

Qual é o caminho certo, se houver um, para fazer algo assim?

alex067
fonte
6
Não adicione a /bin, você pode adicionar a ~/bin(uma lixeira em seu próprio diretório) ou a /usr/local/bin(para compartilhar com todos os usuários do seu sistema, mas não interferir no gerenciador de pacotes). Ou melhor, neste caso, para usar um alias.
Ctrl-alt-delor

Respostas:

24

Uma maneira fácil de um atalho é definir um alias

alias dcls='docker container ls'

Isso será executado docker container lsquando você digitar dclse o comando aliaslistar seus aliases definidos. Para remover esse alias, use unalias dcls.

Se você usar o bash, poderá salvar o alias no seu ~/.bashrcou ~/.bash_aliases.

Se o seu ~/.bash_aliasesnão for lido na inicialização, você poderá adicionar esta linha ao seu ~/.bashrc:

[ -f ~/.bash_aliases ] && . ~/.bash_aliases
Freddy
fonte
Obrigado Freddy! Terei que criar esse alias toda vez que o servidor reiniciar? Ou é limitado ao meu perfil de usuário?
alex067
2
Você precisa salvá-lo no arquivo de inicialização do shell do usuário ~/.bashrcou ~/.profileou ... Se você não salvar o alias, ele será perdido quando você sair ou fechar o terminal.
Freddy
Obrigado novamente. E se não tivermos .bashrc ou .profile em nossa pasta ~?
alex067
11
Mesmo? Que servidor estranho! Se você usar o bash, poderá criá-lo usando echo "alias dcls='docker container ls'" >> ~/.bashrc, então origine-o . ~/.bashrcou faça logout e faça login novamente.
Freddy
Um brinde por sua ajuda, conseguiu!
Alex067
15

Na verdade, o que você descreve funcionaria, com algumas notas:

  1. Você pode simplesmente colocar docker container lsem um arquivo chamado /bin/dcls. Mas o comportamento disso pode ser um pouco complicado. É um pouco mais confiável iniciar o arquivo com uma linha chamada "shebang", para que o arquivo pareça
    #! / bin / sh
    container docker ls
    que especifica que o arquivo é um script de shell.
  2. Antes de poder executar o comando, você deve tornar o arquivo executável com um comando como
    chmod + x / bin / dcls
    Você provavelmente precisa ser root para fazer isso (por exemplo, execute-o com sudo).
  3. Siga os dois passos acima e você poderá digitar dcls e ele fará docker container ls. Mas, se você digitar dcls -l foo, ainda funcionará docker container ls. Se você quiser docker container ls -l foo, altere o script para dizer

    #! / bin / sh
    container docker ls "$ @"
    que especifica que qualquer argumento digitado na dclslinha de comando deve ser passado para o docker container lscomando.

    Naturalmente, há coisas mais complicadas que você pode fazer com argumentos de linha de comando.

Para o mapeamento de um comando simples → um comando simples, que não precisa ser compartilhado com outros usuários, é mais simples definir um alias ( como sugerido por Freddy ) ou uma função de shell. Funções mais complicadas são frequentemente escritas como scripts; ou seja, arquivos de texto que contêm comandos. Mas, se você não precisar compartilhá-lo com outros usuários, é mais comum usar um bindiretório privado .

$ cd                                     # (para o seu diretório pessoal) 
$ mkdir bin
Copie dclspara $HOME/bine adicione
exportar PATH = "$ HOME / bin: $ PATH"
para o seu ~/.bashrc.

Além disso, é comum inserir scripts pessoais /usr/local/bine partir /binpara os programas que acompanham o sistema.

G-Man Diz 'Reinstate Monica'
fonte
Ótima resposta. Se eu adicioná-lo à lixeira como mencionei, isso afetaria todos os usuários corretos?
Alex067
Sim; todos os usuários olhar no /bin,  /usr/bine diretórios como tipicamente compartilhada /usr/local/bin e, por vezes /opt, para que os programas nesses diretórios estão disponíveis para todos os usuários.
G-Man diz 'Reinstate Monica'
11
Se você deseja compartilhar com outras pessoas no sistema, use-o /usr/local/binpara que não interfira no gerenciador de pacotes.
CTRL-ALT-DELOR
5
+1 para recomendar $HOME/bin. Você realmente deveria usar isso. Esse não é apenas o escopo correto, mas ajuda quando você reinstala o sistema (e mantém o seu HOME) para não perder seu comando personalizado.
allo
11
FWIW eu uso em seu ~/.local/bin lugar .
Sparhawk
0

Se apenas para você, um alias é bom, mas de acordo com os scripts locais do sistema de arquivos do Linux Filesier Hierarchy Standard/usr/local/bin/ , não /bin.

  1. Embora certamente funcione /bin, é melhor manter os padrões, especialmente se o seu software for implantado nas instalações do cliente.
  2. Se o seu script for opcional, ele deverá entrar em /opt
  3. O script em si seria:

    #!/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
    
Fabby
fonte