Script de envoltura 'hhighlighter' diciendo command no encontrado

Obtuve el script de envoltura 'hhighlighter' de https://github.com/paoloantinori/hhighlighter que colorea todo lo que desea en stdout. Seguí las instrucciones sobre la installation de ack-grep, alias creado para ack = ack-grep en ~ / .bashrc, puse la function h () en ~ / .bashrc, todo funciona bien al escribir en la terminal. Pero al poner los mismos commands EXACTOS en un script bash, dice command no encontrado. Daré ejemplos aquí …

root@kali:~# echo "abcd" | habcd abcd 

Así es como se ve mi script

 #!/bin/bash echo "abcd" | habcd 

Exactamente como el command ingresado, pero aquí está el resultado al ejecutar el script

 root@kali:~# ./test.sh ./test.sh: line 1: h: command not found 

¿Cómo podría funcionar esto al escribir directamente en la terminal, pero no cuando se tiene exactamente el mismo command en una secuencia de commands bash? Si mi ~ / .bashrc es necesario o se necesita algo más para resolver esto, por favor avíseme, ha estado sucediendo en 4 días sin resolver esto.

El problema es: cuando bash se inicia de forma no interactiva, no lee ~/.bashrc .

Por lo tanto, debe leer h() desde el script.

Si desea usar alias en un script, entonces tiene que

  1. habilitar el uso de alias en el script con shopt -s expand_aliases

  2. define el alias en el script

Una alternativa a un alias es definir una function de shell (que funciona igual en shells interactivos y no interactivos):

 foo () { bar "$@" } 

Pero no es posible asumir las definiciones de alias o funciones desde el shell en ejecución en un script a medida que el shell que ejecuta el script se reinicializa.

La solución que me ayudó fue obligar al script a ejecutarse en modo interactivo con un encabezado #!/bin/bash -i .

La Guía Avanzada de Bash-Scripting advierte acerca de las consecuencias extrañas sin embargo:

Tenga en count que esto puede provocar un comportamiento de script errático o mostrar posts de error incluso cuando no hay ningún error presente.

Sin embargo, no he observado nada como esto.