alias vs.función en scripts de bash

11

Quiero saber la diferencia entre alias y funciones en el shell bash, y cuándo usar cuál.

Parece obvio que, dado que las funciones pueden tomar argumentos, son mucho más poderosas, ya que trabajo principalmente en la carretera con una netbook y quiero ahorrar energía y poder de procesamiento, especialmente me gustaría saber un poco más sobre las diferencias de rendimiento de estas dos formas de extender la funcionalidad bash son.

MaxAxeHax
fuente
1
No hay necesidad de ser humillante. Si su pregunta no es deseada, será rechazada. Y si alguien quiere que aclares tu pregunta, lo dirá en un comentario. Y prohibirle a la gente que edite tu publicación es como perder el punto. Este sitio está diseñado para que todo sea editable para todos.
k0pernikus
No estaba tratando de prohibirlo, solo pedía amablemente darme la oportunidad de aclarar si lo consideraban necesario. He tenido la experiencia de hacer preguntas muy simples sobre temas que conozco poco, y luego la gente pensó que era totalmente obvio que estaba preguntando sobre algo más complejo y me corrigió sobre cómo no sé cómo pedir lo que quiero. . Por supuesto, una de las grandes ventajas de esta plataforma es el hecho de que es editable por sus pares, no estaba tratando de socavar eso. Gracias por sus comentarios, me hizo pensar :)
MaxAxeHax
Posible duplicado entre sitios de: unix.stackexchange.com/questions/30925/…
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

Respuestas:

10

Piense en los alias como apodos. Es posible que tenga un comando que realiza mucho pero que quiere acortar.

Como ejemplo, a menudo desea ir directamente al escritorio en la línea de comandos, por lo que puede hacer esto

alias desktop="cd ~/Desktop"

A partir de entonces solo tienes que escribir

desktop

en terminal y realizará el cd ~/Desktoppara usted.

Las funciones contienen lógica. En una función, puede realizar llamadas a varios programas diferentes. Aquí hay una función de eco simple

function e {
                echo $1 
                echo $1 $1
                echo $1 $1 $1                 
           }  

Si bien puede parecer similar a un alias cuando lo llamas

e Hello

Su e () puede hacer que sucedan muchas cosas diferentes. Lo anterior es un ejemplo simplista.

Los alias deben reservarse para casos de uso simple. Ejemplo personal: he reemplazado mi rmcomando así

alias rm='trash-put'

Cada vez que hago un rm, lo enviará a la basura en lugar de eliminarlo del disco. Esto satisface mi torpeza en la terminal donde puedo (a veces) eliminar accidentalmente un archivo importante.

Las funciones , debe recordar, son piezas de lógica. Por lo general, no usaría una función independiente. Sería parte de un guión más grande. Imagine un script que toma todos sus archivos y los renombra a sus versiones latinas de cerdo. Ignora que hay diferentes formas de hacerlo.

Pero lo que podría hacer es recorrer cada archivo en el directorio y pasar la ruta de archivo a su función RenameAsPigLatin. La función RenameAsPigLatin podría tener una lógica adicional que involucre números, donde usted decide que los archivos que terminan con números no deberían renombrarse.

Inmediatamente puede ver el beneficio de tenerlo como una función. La función puede centrarse en cambiar el nombre de sus reglas extrañas, mientras que el resto del script puede atravesar varios directorios según sea necesario.

Mendhak
fuente
2
En mi opinión, hay muchas razones para usar funciones independientes. De hecho, tengo una serie de funciones definidas junto con mis alias. Por ejemplo, he reemplazado cd con una función del mismo nombre para que pueda hacer que automáticamente haga un ls después de cada cd sin sacrificar ninguna funcionalidad. Esto no se puede hacer con un alias porque requiere un poco de lógica.
Scott Severance
3

Un alias es un acceso directo simple que se usa en una consola para evitar escribir comandos largos o siempre repetir las mismas opciones.

Un ejemplo clásico sería:

alias ll='ls -l'

Los alias solo funcionan en una consola interactiva, no están destinados a ser utilizados en scripts.

La función se puede usar en scripts o en la consola, pero se usa con más frecuencia en scripts.

Contrariamente a los alias, que simplemente son reemplazados por su valor, una función será interpretada por el shell bash.

Las funciones son mucho más poderosas que los alias, se pueden usar para construir programas muy complejos.

wjandrea
fuente