Snažím sa otvoriť všetky súbory uvedené v súbore a.lst
:
symptom1.log
symptom2.log
symptom3.log
symptom4.log
Ale skúste nasledujúci príkaz:
cat a.lst | tr "n" " " | vim -
otvára iba výstup stdin
symptom1.log symptom2.log symptom3.log symptom4.log
Neotvára sa symptom1.log, symptom2.log, symptom3.log & symptom4.log
in vim.
Ako otvoriť všetky súbory uvedené v a.lst pomocou vim?
odpovede:
6 pre odpoveď č. 1Môžete použiť xargs na zarovnanie argumentov do vi:
vim $(cat 1.t | xargs)
alebo
cat a.lst | xargs vim
Ak ich chcete otvoriť v rozdelenom zobrazení, použite -o (horizontálne) alebo -O (vertikálne):
cat a.lst | xargs vim -o
cat a.lst | xargs vim -O
2 pre odpoveď č. 2
while read f ; do cat $f ; done < a.lst | vim -
2 pre odpoveď č. 3
Páči sa mi variácia možnosti xargov Qiau:
xargs vim < a.lst
Funguje to preto, že presmerovanie vstupu sa použije na xargs
príkaz skôr ako vim
.
Ak je váš shell bash, ďalšou možnosťou je táto:
vim $(<a.lst)
Funguje to preto, že v rámci $(...)
, presmerovanie vstupu bez príkazu jednoducho vytlačí výsledky vstupu, čím sa súbor rozbalí do zoznamu súborov, aby sa vim mohol otvoriť.
UPDATE:
Spomenuli ste v komentároch, ktoré používate csh
ako vaša škrupina. Ďalšou možnosťou pre vás teda môže byť:
vim `cat a.lst`
To by malo fungovať aj v škrupinách POSIX, ale chcel by som zdôrazniť, že backquoty sú zastarané v niektorých iných škrupinách (najmä bash) v prospech $(...)
alternatíva.
Upozorňujeme, že presmerovanie sa môže uskutočniť na viacerých miestach príkazového riadku. To by malo fungovať aj v csh aj bash:
< a.lst xargs vim
vim sa môže sťažovať, že jeho vstup nepochádza z terminálu, ale zdá sa, že pre mňa napriek tomu funguje.