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

Запуск CAT на ЭКРАНЕ нет вывода в файл

Я пытаюсь закодировать эту команду для запуска на экране вместе с двумя другими, которые будут использовать cat прочитать файл, а затем передать его в awk для фильтрации. Вот команда;

screen -d -m /bin/cat /var/www/html/filter/unfiltered.txt | awk '{print $1}' > /var/www/html/filter/first.txt

Если я проверю отсоединенный экран, я вижу, что он фильтрует список, когда он завершается, файл first.txt создается, но пусто. Я кое-что видел об использовании -L на экране для журнала вывода, но я хочу, чтобы вывод шел в ту же папку, в которой находится нефильтрованный список, и вызывался first.txt, Я не могу понять, почему он успешно запустится, но выходной файл каждый раз пуст. Если я запустил его без screen -d -m созданный файл не пустой. Я думаю, что мне что-то не хватает с экранной командой. Я только начал пользоваться экраном. Я не уверен, когда еще публиковать.

Причина, по которой это не сработает, заключается в том, что оболочка разделяет команду на две части следующим образом:

screen -d -m /bin/cat /var/www/html/filter/unfiltered.txt

awk '{print $1}' >/var/www/html/filter/first.txt

В screen бежит cat на отдельной квартире. Тогда нет вывода на стандартный вывод трубить awk.

Если вы хотите, чтобы канал запускался под экраном, вам нужно сгруппировать его с другим экземпляром оболочки:

screen -d -m bash -c 'cat /var/www/html/filter/unfiltered.txt | awk "{print $1}" >/var/www/html/filter/first.txt'

Сделав это, должно стать ясно, что это ненужное использование cat и на самом деле команду можно упростить так:

screen -d -m bash -c 'awk "{print $1}" </var/www/html/filter/unfiltered.txt >/var/www/html/filter/first.txt'

Обратите внимание, что я изменил внутренние кавычки с одиночных на парные. Это потому, что я использовал одинарные кавычки для защиты всей команды (и особенно $1 с ранней оценки).