Как Вы обрабатываете вывод команды в оболочке линию за линией?

Я должен обработать общие зависимости библиотеки библиотеки из сценария удара. for управляйте процессами пословно:

for DEPENDENCY in `otool -L MyApplication | sed 1d`
do
    ...
done

Что путь состоит в том, чтобы обработать результаты линию за линией?

22
задан Jens 24 May 2012 в 21:05
поделиться

5 ответов

Вы должны использовать команду read.

otool -L MyApplication | sed 1d | \
while read i
do
  echo "line: " $i
done

См. bashref для описания встроенного модуля read и его опций. Примеры использования read в сочетании с for можно также посмотреть в следующем учебнике.

29
ответ дан 29 November 2019 в 04:36
поделиться
otool -L MyApplication | sed 1d | while read line ;
do
  # do stuff with $line
done
9
ответ дан 29 November 2019 в 04:36
поделиться

Попробуйте изменить внутренний разделитель полей на новую строку. По умолчанию bash разделяет токены пробелами при использовании цикла for. Ваша настройка IFS заставит цикл for разделять токены на основе любой строки IFS, равной (таким образом, разделение токенов списка на новые строки вместо токенов на пробелы).

[bash ] $ IFS="
"
[bash ] $ for DEPENDENCY in `otool -L MyApplication | sed 1d`
do
    ....
done
3
ответ дан 29 November 2019 в 04:36
поделиться

Вы можете использовать awk для обработки строк. То, что именно является лучшим способом, зависит от того, что вы пытаетесь сделать.

0
ответ дан 29 November 2019 в 04:36
поделиться

вы также можете сделать это на awk. Нет необходимости использовать bash для цикла

otool -L MyApplication | awk 'NR>1
{
  # do your stuff here since awk process line by line.
}' 
0
ответ дан 29 November 2019 в 04:36
поделиться
Другие вопросы по тегам:

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