Назад | Перейти на главную страницу

Скрипт Bash запускает процессы бесконечно

Ubuntu. Утилита basename должна быть установлена. Сценарий Bash называется "basename"

#!/bin/bash

PROGNAME=$(basename $0)

if [[ -e $1 ]]; then
   echo -e "\nFile Type:"
   file $1
   echo -e "\nFile Status:"
   stat $1
else
   echo "$PROGNAME: usage: $PROGNAME file" >&2
   exit 1
fi

После запуска "./basename case", где "case" - это сценарий bash, произошли ошибки:

/home/user/bin/basename: fork: retry: No child processes
/home/user/bin/basename: fork: retry: No child processes
...
/home/user/bin/basename: fork: Resource temporarily unavailable

И в итоге показывает ожидаемый результат.

Здесь происходит что-то хитрое. Что это?

Ладно, я понял. Команда basename в третьей строке запускает не инструмент linux basename, а рекурсивно запускает этот скрипт. Так что именовать сценарии, как стандартные программы Linux, не очень хорошо. Чтобы сценарий работал с именем "basename", он должен использовать полный путь к basename.

PROGNAME=$(/usr/bin/basename $0)