Agregar atajos de comando a / bin

8

¿Hay alguna forma de agregar comandos personalizados /bin?

Por ejemplo, uso docker container lsmucho y me gustaría convertir esto en un comando de acceso directo, como dcls.

Si añado un archivo llamado dclsa /biny dentro del archivo, especifique el comando exacto docker container ls, supongo que esto no funcionaría.

¿Cuál es la forma correcta, si hay una, de hacer algo como esto?

alex067
fuente
66
No agregue a /bin, puede agregar a ~/bin(un contenedor en su propio directorio) o a /usr/local/bin(para compartir con todos los usuarios de su sistema, pero no interferir con el administrador de paquetes). O mejor en este caso, usar un alias.
ctrl-alt-delor

Respuestas:

25

Una manera fácil de un atajo es definir un alias

alias dcls='docker container ls'

Esto se ejecutará docker container lscuando ingrese dclsy el comando aliasenumere sus alias definidos. Para eliminar este alias, use unalias dcls.

Si usa bash, puede guardar el alias en su ~/.bashrco ~/.bash_aliases.

Si ~/.bash_aliasesno se lee en el inicio, puede agregar esta línea a su ~/.bashrc:

[ -f ~/.bash_aliases ] && . ~/.bash_aliases
Freddy
fuente
Gracias Freddy! ¿Tendré que crear este alias cada vez que se reinicie el servidor? ¿O está limitado a mi perfil de usuario?
alex067
2
Usted tiene que guardarlo en el archivo de arranque del shell del usuario ~/.bashrco ~/.profile, o ... Si no lo hace guardar el alias que se pierde cuando se cierra la sesión o cerrar el terminal.
Freddy
Gracias de nuevo. ¿Qué pasa si no tenemos .bashrc o .profile en nuestra carpeta ~?
alex067
1
De Verdad? ¡Qué servidor tan extraño! Si usa bash, puede crearlo usando echo "alias dcls='docker container ls'" >> ~/.bashrc, luego . ~/.bashrcobtenerlo o cerrar sesión e iniciar sesión nuevamente.
Freddy
Saludos por su ayuda, lo tengo funcionando!
alex067
15

En realidad, lo que describas funcionaría, con algunas notas:

  1. Simplemente podría poner docker container lsen un archivo llamado /bin/dcls. Pero el comportamiento de eso puede ser un poco complicado. Es un poco más confiable comenzar el archivo con una línea llamada "shebang", para que el archivo se vea como
    #! / bin / sh
    contenedor acoplable ls
    que especifica que el archivo es un script de shell.
  2. Antes de poder ejecutar el comando, debe hacer que el archivo sea ejecutable con un comando como
    chmod + x / bin / dcls
    Probablemente necesite ser root para hacer esto (es decir, ejecutarlo con sudo).
  3. Siga los dos pasos anteriores y podrá escribir dcls y funcionará docker container ls. Pero, si escribe dcls -l foo, todavía lo hará docker container ls. Si quieres que lo haga docker container ls -l foo, debes cambiar el guión para que diga

    #! / bin / sh
    contenedor acoplable ls "$ @"
    que especifica que cualquier argumento que escriba en la dclslínea de comando debe pasar al docker container lscomando.

    Naturalmente, hay cosas más complicadas que puede hacer con argumentos de línea de comandos.

Para una asignación de un comando simple → un comando simple, que no necesita ser compartido con otros usuarios, es más simple definir un alias ( como sugirió Freddy ), o una función de shell. Las funciones más complicadas a menudo se escriben como scripts; es decir, archivos de texto que contienen comandos. Pero, si no necesita compartirlo con otros usuarios, es más común usar un bindirectorio privado .

$ cd                                     # (a su directorio de inicio) 
$ mkdir bin
A continuación, copie dclsa $HOME/bin, y añadir
export PATH = "$ HOME / bin: $ PATH"
a tu ~/.bashrc.

Además, es común incluir scripts personales /usr/local/biny salir /binpara los programas que vienen con el sistema.

G-Man dice 'restablecer a Mónica'
fuente
Gran respuesta. Si lo agrego a bin como mencioné, eso afectaría a todos los usuarios ¿correcto?
alex067
Si; todos los usuarios buscan en /bin,  /usr/biny generalmente comparten directorios como /usr/local/bin y /opt, a veces , por lo que los programas en esos directorios están disponibles para todos los usuarios.
G-Man dice 'Restablecer a Monica'
1
Si desea compartir con otros usuarios de su sistema /usr/local/bin, no interfiera con el administrador de paquetes.
ctrl-alt-delor
55
+1 para recomendar $HOME/bin. Realmente deberías usar esto. Este no es solo el alcance correcto, sino que ayuda cuando reinstala su sistema (y mantiene su HOME) para no perder su comando personalizado.
allo
1
FWIW que uso ~/.local/bin en su lugar .
Sparhawk
0

Si es solo para usted, un alias está bien, pero de acuerdo con el estándar de jerarquía del sistema de archivos de Linux , los scripts locales de todo el sistema entran /usr/local/bin/, no /bin.

  1. Aunque ciertamente funcionaría /bin, es mejor cumplir con los estándares, especialmente si su software se implementará en los sitios del cliente.
  2. Si su script sería opcional, debería ir en /opt
  3. El guión en sí sería:

    #!/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
fuente