BlackPearl выше, вероятно, правильно - $1
скорее всего пуст во время выполнения вашей программы. В результате команда grep выглядит следующим образом: grep -c $OUT
, которая указывает grep искать $OUT
в stdin. stdin - это клавиатура (я подозреваю), поэтому grep будет ждать вечно (ну, пока вы не нажмете Ctrl-D или Ctrl- C).
Чтобы решить вашу проблему, укажите параметр при выполнении скрипта.
Вы также можете полностью избежать этой проблемы, посчитав все уникальные значения в вашем файле passwd следующим образом:
OUT=$(mktemp /tmp/output.XXXXXXXXXX) || { echo "Failed to create temp file"; exit 1; }
awk -F: '{print $7}' /etc/passwd >> "$OUT"
sort "$OUT" | uniq -c # count each unique value in passwd file column 7