Как вы обрабатываете вывод команды в командной строке по строкам?
Мне нужно обработать общие библиотеки библиотеки из bash script. Команда for
обрабатывает слово за словом:
for DEPENDENCY in `otool -L MyApplication | sed 1d`
do
...
done
Каков способ обработки результатов по очереди?
Ответы
Ответ 1
Вы должны использовать команду read
.
otool -L MyApplication | sed 1d | \
while read i
do
echo "line: " $i
done
См. bashref для описания встроенного чтения и его параметров. Вы также можете посмотреть следующий учебник для примеров использования read
в сочетании с for
.
Ответ 2
otool -L MyApplication | sed 1d | while read line ;
do
# do stuff with $line
done
Ответ 3
Попробуйте изменить внутренний разделитель полей на новую строку. По умолчанию bash будет разделять маркеры пробелами при использовании цикла for. Ваш IFS-параметр заставит for-цикл разделять маркеры на основе любой строчной IFS, равной (таким образом, разбивая токены списка символами новой строки, а не токенами пробелами).
[bash ] $ IFS="
"
[bash ] $ for DEPENDENCY in `otool -L MyApplication | sed 1d`
do
....
done
Ответ 4
Вы можете использовать awk
для обработки вещей на основе строки. Точно, какой лучший способ зависит от того, что вы пытаетесь сделать, хотя.
Ответ 5
вы также можете сделать это awk. Нет необходимости использовать цикл bash for
otool -L MyApplication | awk 'NR>1
{
# do your stuff here since awk process line by line.
}'
Ответ 6
Вы должны использовать shell builtin read
, но будьте осторожны с строками, содержащими пробелы и вкладки. Я предлагаю локально изменить значение $IFS
:
otool -L MyApplication | sed 1d | \
while IFS= read i; do
echo "line: " $i
done