Опитвам се да отворя всички файлове, изброени в файла a.lst
:
symptom1.log
symptom2.log
symptom3.log
symptom4.log
Но опитайте следната команда:
cat a.lst | tr "n" " " | vim -
се отваря само изходът stdin
symptom1.log symptom2.log symptom3.log symptom4.log
Не се отваря symptom1.log, symptom2.log, symptom3.log & symptom4.log
in vim.
Как да отворите всички файлове, изброени в a.lst използвайки vim?
Отговори:
6 за отговор № 1Може да използвате xargs, за да подредите аргументите в vi:
vim $(cat 1.t | xargs)
или
cat a.lst | xargs vim
Ако искате да се отворят в разделен изглед, използвайте -о (хоризонтално) или -O (вертикално):
cat a.lst | xargs vim -o
cat a.lst | xargs vim -O
2 за отговор № 2
while read f ; do cat $f ; done < a.lst | vim -
2 за отговор № 3
Харесва ми вариация на опцията на Qiau xargs:
xargs vim < a.lst
Това работи, защото пренасочването на вход се прилага към xargs
команда, а не vim
.
Ако вашата черупка е bash, друга опция е следната:
vim $(<a.lst)
Това работи, защото в рамките на $(...)
, пренасочването на вход без команда просто отпечатва резултатите от входа, оттам разширявайки файла в списък с файлове, за да се отвори vim.
UPDATE:
Споменахте в коментарите, които използвате csh
като вашата черупка. Така че може да бъде и друг вариант:
vim `cat a.lst`
Това трябва да работи и в POSIX черупки, но трябва да отбележа, че backquotes са отхвърлени в някои други черупки (особено bash) в полза на $(...)
алтернатива.
Обърнете внимание, че пренасочването може да се случи на няколко места в командния ред. Това също трябва да работи както в csh, така и в bash:
< a.lst xargs vim
vim може да се оплаче, че неговият вход не идва от терминал, но така или иначе изглежда работи за мен.