После того, как ваш узкий запрос выглядит следующим образом:
sha256sum abc.txt |
awk '{print $1}' |
if [ "$(cat)" = "8237491082roieuwr0r9812734iur" ]; then echo "match"; fi
... as cat
без аргументов считывает стандартный ввод команды, а в конвейере содержимое, созданное на предыдущих этапах, передается в их преемники.
Альтернативно:
sha256sum abc.txt |
awk '{print $1}' |
if read -r line && [ "$line" = "8237491082roieuwr0r9812734iur" ]; then echo "match"; fi
... где мы read
только одна строка из stdin вместо использования cat
. (Вместо l oop по всем строкам, указанным в stdin, см. BashFAQ # 1 ).
Однако я настоятельно рекомендовал бы написать это вместо этого:
if [ "$(sha256sum abc.txt | awk '{print $1}')" = "8237491082roieuwr0r9812734iur" ]; then
echo "match"
fi
... который, помимо прочего, сохраняет вашу логику c вне конвейера, поэтому ваш оператор if
может устанавливать переменные, которые остаются установленными после выхода из конвейера. См. BashFAQ # 24 для более подробной информации о проблемах, присущих выполнению кода в конвейерах.