Простой :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
очевидно, что сценарий должен запускаться заново -при каждом обновлении пакета.
Научитесь использовать вместо этого:
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
по краткому описанию ошибки.
См. 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 все, что определено ранее. Во втором случае все, что внесено в группу, впоследствии не будет доступно для вашего скрипта. Вы можете проверить это, определив новую переменную в группе и попытавшись получить к ней доступ позже, она будет пустой. Вероятно, это причина, по которой в некоторых случаях предпочтение отдается первому способу.