Я сомневаюсь less
имеет такую опцию.
То, что Вы делаете, очень похоже на какой tail -f
достигает, только с удобным scrollback. То, что можно сделать, завершено текущее less
и повторно запустите его с
tail -f logfile -n lines_back | less
тем путем Ваш буфер будет содержать только lines_back
строки журнала (и должен вырасти все равно).
Давайте проанализируем вашу команду:
yes n | (ls | xargs -n1 -p rm)
Конвейер ls | xargs -n1 -p rm
имеет ls
, читающий стандартный ввод, но имеет стандартный вывод, перенаправленный на xargs
, который принимает его как стандартный ввод, а стандартный вывод не изменяется.
Теперь вы отправляете вывод yes
в этот конвейер. Поскольку стандартный ввод этого конвейера идет в ls
, который даже не читает его, xargs
не видит ничего из этого.
Теперь очевиден вопрос: как xargs
может спросить вас, выполнять ли команду? В конце концов, его стандартный ввод (где программы обычно читают действия пользователя) перенаправлен на чтение вывода ls
!
Ответ заключается в том, что xargs
обходит механизм перенаправления для этих вопросов, просто открывая файл терминала / dev / tty
напрямую. Поэтому перенаправление файлов не влияет на ввод подтверждения.
Для ввода в xargs
вам понадобится программа, которая может представить процесс с помощью терминального устройства, управляемого программой. Очень мощной (но и довольно сложной) такой программой является expect
. К сожалению, я не знаю более простого способа добиться желаемого.
Вы должны сохранить ваш ответ результат в переменной сценария и использовать его в perl вызов, как
REPL = `cat ~/foo/bar/file.txt`
perl -pe "s/loremipsum/$REPL/ge" -i ~/path/to/target.txt
Но я думаю, что было бы лучше использовать perl скрипт только для замены последовательности на содержимое файла, потому что содержание foo/bar/file.txt может повредить вашу команду.
-121--195452-Попробуйте вместо этого:
#!/bin/bash
perl -pe "s/loremipsum/`cat ~/foo/bar/file.txt`/ge" -i ~/path/to/target.txt
Похоже, у вас проблемы с цитатами синглов.
-121--195453-Вы можете использовать:
ls | xargs -n1 rm -r
И это будет работать для каталогов или/и файлов.