Процессы печати, отсортированные по использованию ЦП

Здесь есть несколько проблем:

  1. Цикл while не считывает ввод. Правильный формат -

     при чтении строки; делать ... ; done <входной файл 
     

    Или

     какая-то другая команда | при чтении ... 
     

    Ваш цикл зависает, ожидая ввода. Вы можете проверить это, запустив свой скрипт, а затем набрав что-нибудь и нажав Enter (здесь я ввел foo ):

     $ foo.sh 
    Выполнение поиска с помощью grep .. {{1} } foo 
    Поиск foo .. 
     

    Вы можете улучшить это, добавив подсказку к вашему read :

     while IFS = '' read -p " Введите шаблон поиска: "-r строка ... 
     

    Он будет работать, пока вы не остановите его с помощью Ctrl + C .

  2. || [[-n «$ line»]] (что означает «ИЛИ переменная $ line не пуста») никогда не выполняется. Поскольку чтение зависает, «ИЛИ» никогда не достигается. Я все равно не понимаю, что вы хотели. Если вы хотите найти $ line , если определена $ line , и использовать read , если это не так, вам понадобится что-то вроде:

     if [[-n "$ линия"]]; затем 
    grep -r "$ line" --exclude-dir = grep_results> ./grep_results/"$line"_infile.txt
    else
    , а IFS = '' read - p "Введите шаблон поиска:" -r строка || [[-n "$ линия"]]; сделать 
    grep -r "$ line" --exclude-dir = grep_results> ./grep_results/"$line"_infile.txt
    done 
    fi 
     

    Здесь, если $ line не определена, вам все равно нужно ввести ее вручную. Более чистый подход - либо передать файл в цикл while :

     while IFS = '' read -r line || [[-n "$ линия"]]; выполните 
    grep -r "$ line" --exclude-dir = grep_results> ./grep_results/"$line"_infile.txt
    done 
5
03.10.2017, 16:51
0 ответов

Теги

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