programacion - que es un comando bash
Ejecuta una función bash al ingresar a un directorio (4)
Hay algunas otras versiones de esto por ahí, incluyendo
- smartcd , que escribí, y tiene un montón de características que incluyen plantillas y ahorro temporal de variables
- ondir , que es más pequeño y mucho más sencillo.
Ambos soportan tanto bash como zsh
Me gustaría ejecutar una función de bash particular cuando ingrese a un nuevo directorio. Algo como:
alias cd="cd $@ && myfunction"
$@
no funciona allí, y agregar una barra invertida no ayuda. También estoy un poco preocupado por jugar con cd, y sería bueno si esto funcionara para otros comandos que cambiaron el directorio, como pushd
y popd
.
¿Alias / comandos mejores?
He escrito un script ZSH que utiliza la función de devolución de llamada chpwd
para las configuraciones ZSH específicas del proyecto de origen. No estoy seguro de si funciona con Bash, pero creo que valdrá la pena intentarlo. Si no encuentra un archivo de script en el directorio en el que está ingresando el cd''ing, revisará los directorios principales hasta que encuentre un script en la fuente (o hasta que llegue a /
). También llama a una función unmagic
cuando cd''ing fuera del directorio, lo que le permite limpiar su entorno cuando deja un proyecto.
http://github.com/jkramer/home/blob/master/.zsh/func/magic
Ejemplo para un script "mágico":
export BASE=$PWD # needed for another script of mine that allows you to cd into the projects base directory by pressing ^b
ctags -R --languages=Perl $PWD # update ctags file when entering the project directory
export PERL5LIB="$BASE/lib"
# function that starts the catalyst server
function srv {
perl $BASE/script/${PROJECT_NAME}_server.pl
}
# clean up
function unmagic {
unfunction src
unset PERL5LIB
}
La solución más fácil que se me ocurre es esta
myfunction() {
if [ "$PWD" != "$MYOLDPWD" ]; then
MYOLDPWD="$PWD";
# strut yer stuff here..
fi
}
export PROMPT_COMMAND=myfunction
Eso debería hacerlo. Funcionará con todos los comandos y se activará antes de que se muestre el indicador.
Los alias no aceptan parámetros. Deberías usar una función. No hay necesidad de ejecutarlo automáticamente cada vez que se emita un aviso.
function cd () { builtin cd "$@" && myfunction; }
La palabra clave builtin
permite redefinir un componente Bash sin crear una recursión. La cotización del parámetro lo hace funcionar en caso de que haya espacios en los nombres de directorio.
Los documentos de Bash dicen:
Para casi todos los propósitos, las funciones de shell se prefieren a los alias.