Скажем, то, что я хочу вывод ls
просматриваемый в nano
или tilde
.
Я сделал бы следующее:
ls >> tmp
nano tmp
rm tmp
Мне не нравится это, потому что это создает dumpfile, который я иногда забываю удалять. Некоторые люди предлагают это:
ls | less
или
ls | more
Но я не могу сделать:
ls | nano
Таким образом, как решить это? Мне было бы нужно это особенно когда дело доходит до огромных терминальных выводов как текущие процессы, где я хотел бы сделать поиск впоследствии.
Много программ традиционно используют -
означать стандартный ввод-вывод или стандартный вывод. Таким образом можно открыть экранный вывод команды в нано использовании -
как имя файла, как в:
ls | nano -
Это будет только работать, если Ваша программа действительно будет поддерживать ту конвенцию. Это включает nano
и vi
на терминале. Даже графический текстовый редактор gedit
поддержки это. Однако pluma
или mousepad
не поддерживайте его, и вместо этого будет проинструктирован для создания регулярного названного файла -
. В других случаях Вы не можете обойти создание регулярного промежуточного файла сначала.
Если просмотр с тильдой действительно необходим, можно написать сценарий идеи
Создайте функцию в Вашем .bashrc
function tildeIt () {
tmpfile=$(mktemp)
"$@" > $tmpfile
tilde $tmpfile
rm $tmpfile
}
# $@ is all words typed after tildeIt
# mktemp creates a temp file and returns his fullname
Перезагрузка .bashrc
source ~/.bashrc
Использование
tildeIt command -option
Если Вы имеете vipe
, можно сделать
ls | vipe >/dev/null
На *отклоняют, все - файл. Таким образом можно считать стандартный вход из файла. В теории, которая является. Некоторые программы становятся немного сомнительными.
В зависимости от редактора можно считать/dev/stdin. Например, cat
работы, но gedit жалуется, что/dev/stdin является специальным файлом и не может быть отредактирован.
ls | cat /dev/stdin #works
ls | nano /dev/stdin #doesn't work.
ls | vim /dev/stdin #doesn't work
ls | gvim /dev/stdin #works
Что работы с этим методом и что, кажется, легко не отличают. Поэтому просто попробуйте его тем, что Вы хотите, и это будет или работать, или нет.
Если Вы используете bash
, Вы могли бы попробовать tilde <( ls )
.
Посмотрите замену процесса в bash(1)
.