Как использовать `yes` с` xargs -p`?

Я сомневаюсь less имеет такую опцию.

То, что Вы делаете, очень похоже на какой tail -f достигает, только с удобным scrollback. То, что можно сделать, завершено текущее less и повторно запустите его с

     tail -f logfile -n lines_back | less

тем путем Ваш буфер будет содержать только lines_back строки журнала (и должен вырасти все равно).

3
03.05.2019, 21:25
2 ответа

Давайте проанализируем вашу команду:

yes n | (ls | xargs -n1 -p rm)

Конвейер ls | xargs -n1 -p rm имеет ls , читающий стандартный ввод, но имеет стандартный вывод, перенаправленный на xargs , который принимает его как стандартный ввод, а стандартный вывод не изменяется.

Теперь вы отправляете вывод yes в этот конвейер. Поскольку стандартный ввод этого конвейера идет в ls , который даже не читает его, xargs не видит ничего из этого.

Теперь очевиден вопрос: как xargs может спросить вас, выполнять ли команду? В конце концов, его стандартный ввод (где программы обычно читают действия пользователя) перенаправлен на чтение вывода ls !

Ответ заключается в том, что xargs обходит механизм перенаправления для этих вопросов, просто открывая файл терминала / dev / tty напрямую. Поэтому перенаправление файлов не влияет на ввод подтверждения.

Для ввода в xargs вам понадобится программа, которая может представить процесс с помощью терминального устройства, управляемого программой. Очень мощной (но и довольно сложной) такой программой является expect . К сожалению, я не знаю более простого способа добиться желаемого.

2
27.01.2020, 21:22

Вы должны сохранить ваш ответ результат в переменной сценария и использовать его в 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

И это будет работать для каталогов или/и файлов.

1
27.01.2020, 21:22

Теги

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