Сценарий оболочки, не сообщая правильно

Наконец-то я нашел способ заставить эхо ввести пароль (единственная проблема заключалась в том, что у меня не было клавиатуры).

#!/bin/bash
echo -e "password\n" | sudo -S command --flag argument

-e разрешает экранирование обратной косой черты, а sudo -S включает ввод STD (таким образом, ввод из эха конвейерно). Согласно руководству, входы -S должны заканчиваться escape-символом \ n

0
01.08.2018, 15:32
2 ответа

Трудно сказать, почему ваш скрипт ведет себя плохо, так как мы не знаем, как выглядят файлы, с которыми вы имеете дело. Все, что мы знаем, это то, что вас интересуют строки, содержащие строку ID, и что вы хотели бы получить все, что находится после =в этих строках.

Ваш сценарий содержит две неиспользуемые переменные:count(строку, содержащую команду оболочки )иpid(пустую переменную ). Вы также прыгаете через множество обручей, чтобы добраться до того, что после=:

more "$line" | grep ID | awk -F '=' '{ print $2 }'

Команда moreявляется пейджером, т. е. утилитой для просмотра файлов. Вместо этого вы можете разрешить grepчитать файл напрямую:

grep ID "$line" | awk -F '=' '{ print $2 }'

Но это просто позволяет grepделать то, что awkможет сделать само по себе,

awk -F '=' '/ID/ { print $2 }' "$line"

Но мы можем добиться большего. Вместо сохранения всех путей в файл $filename, мы можем позволить findсделать всю работу за нас:

find /opt/Logs -type f -size +10k \
    -exec awk -F '=' '/ID/ { print $2 }' {} + >pid.txt

При этом будут найдены все обычные файлы размером не ниже /opt/Logsразмером более 10 КБ. Для каждого такого файла после (будут напечатаны первые)=в каждой строке, содержащей строку ID. Результат этого будет сохранен в pid.txt.

Связанные:

3
28.01.2020, 02:31
filename='bigfiles' find /opt/Logs -type f -size +10k > $filename

for line in $(cat bigfiles)

do 
echo "$line"

pid= grep JOBID "$line" | awk -F '=' '{print $2}' >> pid.txt

kill $(more $line | grep JOBID | awk -F '=' '{print $2}')

bhist -l $(grep JOBID "$line" | awk -F '=' '{print $2}') >> hist.txt;

done
-1
28.01.2020, 02:31

Теги

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