2012-05-15 4 views
2

У меня есть 2 строки кодакоманда кота в сценарии оболочки Unix

1) следующим кодом:

for i in `ls *.properties`; do cat $i; done 

Я получаю ошибку:

cat: file_name.properties: No such file or directory. 

2) С другой стороны ручной:

for i in *.properties; do cat $i; done 

Работы отлично!

Я думал, что оба были одинаковыми. Может кто-нибудь помочь мне понять разницу между ними? Использование оболочки bash.

+2

делает ваше имя файла содержит пробел? –

+0

Нет, нет. Имена разделяются символами подчеркивания. –

+0

Пожалуйста, укажите * фактический * пример. Это не должно быть вашими настоящими именами файлов, если вы не хотите делиться ими, но что-то, что демонстрирует проблему, которую вы видите, было бы полезно. –

ответ

6

Что выводит следующая команда?

cat -v <<< `ls *.properties` 

Я думаю, проблема в том, что ls странный псевдоним, например, что-то вроде

ls='ls --color' 

Edit: Я видел это раньше. Псевдоним должен быть: alias ls='ls --color=auto'

+0

'псевдоним | grep ls' –

+0

Спасибо, носид. Был такой же псевдоним, как вы упомянули. Ценить это. –

+0

Да. Ваш ответ «Изменить» ответил мне. –

0

Скорее всего, есть каталог, который соответствует *.properties. Затем ls выведет файлы в этом каталоге без имени каталога. Тогда cat не найдет данное имя файла.

Пожалуйста, проверьте, подходит ли file_name.properties в фактических каталогах или в каком-то поддиректории.

EDIT

Чтобы воспроизвести проблему, вы можете попробовать это:

# cd /tmp 
# mkdir foo.properties 
# touch foo.properties/file_name.properties 
# for i in `ls *.properties`; do cat $i; done 
cat: file_name.properties: No such file or directory 
+0

хорошая идея, но в этом случае он сначала увидит 'cat: directoryname :: No такой файл или каталог. '(Обратите внимание на двойной двоеточие) –

+0

@KarolyHorvath вы не будете, потому что' ls dir' выведет _contents_ каталога но не текст 'dir'.Следовательно, 'cat' не будет видеть это имя и не может произвести вывод, который вы предложили. –

+0

@ Кароли, аккуратный, я никогда не замечал этого раньше; 'cat: rc0.d :: Нет такого файла или каталога'. :) – sarnold

Смежные вопросы