кошка STDIN не будет работать дважды в сценарии

Возможно, можно попробовать

lsof | grep $PID

Или

ps aux | grep $PID
2
06.11.2014, 23:28
2 ответа

Ты не делаешь ничего плохого: это то, чего мы должны ожидать.

Первый cat <&0 потребляет все содержимое стандартного входа, потому что именно это и делает cat: он считывает все свои входные данные до конца.

Когда запускается второй cat <&0, на стандартном входе ничего не остаётся: конец файла уже был достигнут раньше.

Если в скрипте оболочки вам нужно сделать 2 или более проходов через стандартный вход, вы должны сбросить его в временный файл, а затем обрабатывать временный файл столько раз, сколько вам нужно.

Безопасное создание временных файлов в /tmp и обеспечение их правильной утилизации, когда ваш скрипт завершается или умирает, является для вас упражнением :-)

Кстати, <&0 является ненужным и ничего не делает. Его функция заключается в том, чтобы направить стандартный ввод на файловый дескриптор 0... который является стандартным вводом... который по определению является тем, где стандартный ввод уже указывает! Вместо этого можно просто выполнить эту команду cat.

8
27.01.2020, 21:49

Если вы хотите читать со стандартного входа дважды, вам нужно как-то его буферизировать (скорее всего, во временном файле). Первый cat можно заменить вызовом tee, который также записывает данные в файл, который можно перечитать вторым вызовом cat (в этом нет необходимости; sed может читаться непосредственно из файла).

tee > input_buffer  # Copy standard input to a file and standard output
echo Content length is $CONTENT_LENGTH
sed -e 's/&/\n/g' input_buffer | cut -d = -f2 
5
27.01.2020, 21:49

Теги

Похожие вопросы