Jeśli używasz bash, chciałbym wam polecić Aby utworzyć funkcję podobną do poniższej:
function custom_cd() { custom_command $1; cd $1; }
alias cd='custom_cd'
Tutaj Twoje własne polecenie może być wszystkim, co spowoduje wykonanie określonych poleceń zgodnie z do wpisanego katalogu.
Alias zadeklarowany później upewnia się, że wpisanie "cd" spowoduje wywołanie funkcji i rzeczywistego polecenia cd.
edit: Przykład dla potrzeb
function custom_cd() {
if [ -z "$1" ];
then
target=~
else
target=$1
fi
target=${target%/}
parent=$(dirname `readlink -f $target`)
grand_parent=`dirname $parent`
script=$grand_parent/`basename $target`.sh
if [ -x $script ];
then
`$script`
fi
cd $1
}
Objaśnienie:
Tworzymy zmienną zawierającą rodzica katalogu, który chcesz wprowadzić. Następnie pobieramy rodzica rodzica. Następnie tworzymy nazwę skryptu w katalogu grandparent.
Następnie sprawdza się wykonywalność tej nazwy pliku, jeśli tak, skrypt jest wykonywany, a na końcu wykonywane jest prawdziwe polecenie cd.
Należy pamiętać o zdefiniowaniu funkcji przed aliasem, ponieważ spowoduje to nieskończoną rekursję!
Dla bezpieczeństwa, w funkcji użyj 'wbudowanego cd', aby upewnić się, że nie trafiłeś w alias. W rzeczywistości, jeśli używasz polecenia "builtin", nie potrzebujesz aliasu, możesz nazwać funkcję "cd". –
@glennjackman nie wiedział o wbudowaniu, podejrzewałem, że coś takiego istnieje, fajnie! – SirDarius
To działało świetnie. Zaimplementowałem coś w tym stylu przeniesionego na powłokę C, ale będzie także tworzyć wersję Bash. Dzięki! – devshans