Запуск CAT в SCREEN не выводит файл

Запуск CAT в SCREEN не выводит файл

Я пытаюсь закодировать эту команду для запуска на экране вместе с двумя другими, которые будут использовать 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. Я только начал использовать screen. Я не уверен, когда еще опубликовать.

решение1

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

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

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

Работает screenна catотдельном pty. Тогда нет выхода настандартный выводдля передачи по трубе 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от ранней оценки).

Связанный контент