grep никогда не выходит, когда он должен искать в небольшом временном файле

У меня проблема с mktemp и grep.

OUT=$(mktemp /tmp/output.XXXXXXXXXX) || { echo "Failed to create temp file"; exit 1; }
awk -F: '{print $7}' /etc/passwd >> $OUT
grep -c $1 $OUT

В строке grep код не выходит, не выводит значение grep Пожалуйста, помогите мне решить эту проблему.

1 ответ

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
Другие вопросы по тегам