Я полагаю, у вас есть проблема с пространством имен.
Вы определяете docker()
функцию, которая делает все странные вещи.
Затем внутри docker()
вы вызываете $(docker network ls)
, которая просто вызываетта же функция рекурсивно, или внутри status
вы вызываете $(docker ps -aq | wc -l)
.
Существует только одно пространство имен - после определения функции с именем docker
docker() {}
везде, где вы вызываете $(docker)
, она будет вызывать этофункция.
Вы можете использовать command
, напр. echo() { printf "I AM NOT ECHO\n"; }; echo 123; command echo 123
- первый echo 123
выполнит функцию, если она существует, однако второй попытается найти исполняемый файл echo
в PATH и выполнить его.
Однако лучше предложить просто использовать уникальныйпространство имен, которое не будет мешать чему-либо. Объявление ваших функций docker
скрывает настоящую команду.
blabla_status() {} # instead of status()
blabla_docker() {} # instead of docker
# etc..
# then later in main()
case "$1" in
docker|status) blabla_"$1"; ;;
*) echo "Unknown function" >&2; ;;
esac