2013-07-17 5 views
0

Я пытаюсь добавить две строки текста из одного файла в начало нескольких других файлов, используя цикл for в командной строке bash.Работа с кошкой и головой в петле bash

Я попробовал это в командной строке:

$for i in *.txt; do head -2 ../../041_R_def_c.txt > X; cat i >> X; \mv X i; done 

, но он дает мне ошибку:

cat: i: No such file or directory 

Я также попытался просто переместить одну строчку в начале файла:

Я думал, что я буду носить имя .txt-файла, но я не думаю, что это то, что я есть. Как я могу получить, чтобы я носил имя файла/играл роль файла?

+3

на короткое время, этот вопрос выглядел как издевательство над животными. : P –

+0

попробуйте 'cat - $ i', так как вам понадобится переменная $ for после инициализации – KeepCalmAndCarryOn

ответ

3

В вашей петле i является переменной, вам нужно получить доступ к содержимому переменной с помощью $, поэтому должно быть cat $i >> X. В противном случае он думает, что вы хотите cat файл с именем i, которого не существует. $i дает имя, хранящееся внутри переменной i.

Вы столкнетесь с той же проблемой с mv ... Вы хотите \mv X $i

+2

Цитата' cat '$ i "'. – Kevin

+0

Вам не нужны кавычки, если в переменной нет пробелов ... но да, это, безусловно, хорошая практика. – SethMMorton

+0

Спасибо! Это сработало! –