Как перебрать результат команды во время работы

Простой :D

Единственный способ — модифицировать исполняемый файл «экран». Лучший (портативный )способ сделать это примерно так:

offset=$(tr -c '[[:print:]]' '\n' <`which screen`|grep -b "screen is terminating" | cut -d ":" -f 1)
printf "\x00" | dd of=`which screen` obs=1 seek=$offset conv=notrunc

очевидно, что сценарий должен запускаться заново -при каждом обновлении пакета.

0
05.12.2020, 21:11
2 ответа

Научитесь использовать вместо этого:

find ~ -type f -size +1G -exec bash -c 'do-stuff-with "$1"' bash_find {} \;

В конструкции find's -exec... {} \;мы открываем встроенный скрипт с bash -c '...', который команда find будет выполнять это для каждого найденного файла.

bash_find— это имя нашего встроенного скрипта, который представлен в $0для нашего скрипта, и в случае какой-либо ошибки скрипт будет остановлен, он будет использоваться для предоставления нам визуального вывода о том, откуда произошел сбой с печатью bash_findпо краткому описанию ошибки.

0
18.03.2021, 22:45

См. BashFAQ/024 , который относится к области видимости переменных и прочему, в зависимости от того, что вы будете использовать. Также расширяется переносимость между оболочками. Ниже приведены примеры для bashи разделения нулей GNU.

С подстановкой процесса и перенаправлением в цикл while и нулевым разделением аргументов:

count=0

while IFS= read -r -d $'\0' f; do
    printf "%s Processing file: %s\n" "$((++count))" "$f" 
done < <(find -type f -print0)

С группировкой команд:

count=0

find -type f -print0 |
    {
        while IFS= read -r -d $'\0' f; do
            printf "%s Processing file: %s\n" "$((++count))" "$f" 
        done
    }

Я добавил переменную count, чтобы продемонстрировать, что в обоих случаях область видимости удобна, вы можете использовать в цикле while все, что определено ранее. Во втором случае все, что внесено в группу, впоследствии не будет доступно для вашего скрипта. Вы можете проверить это, определив новую переменную в группе и попытавшись получить к ней доступ позже, она будет пустой. Вероятно, это причина, по которой в некоторых случаях предпочтение отдается первому способу.

0
18.03.2021, 22:45

Теги

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