powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / проверка существования файлов
11 сообщений из 11, страница 1 из 1
проверка существования файлов
    #32847094
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интересный случай :)
нужно проверить есть ли в каталоге файлы с расширением txt
почему не работает такой код
Код: plaintext
[ -f *.txt ] && echo OK
пишет bash: [: too many arguments
я так привык делать на SCO, там работет
...
Рейтинг: 0 / 0
проверка существования файлов
    #32847142
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
test вовсе не обязан делать globbing
и поэтому *.txt он не находит.


а чтобы не ругался - надо так:

[ -f "*.txt" ] && echo OK

но все равно здесь мы ищем именной ФАЙЛ с именем *.txt
...
Рейтинг: 0 / 0
проверка существования файлов
    #32847184
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не , эт не то
интересно что zsh оболчка все разруливает
zsh -c "[ -f *.txt ] && echo OK"
а что за глюки в sh, bash и ksh непонятно
...
Рейтинг: 0 / 0
проверка существования файлов
    #32847302
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а я Вам о чем написал?

test в данном случае - выступает как встроенная команда.
Да, zsh в ней поддерживает globbing - а другие shells нет.
Так же и оригинальный /usr/bin/test
...
Рейтинг: 0 / 0
проверка существования файлов
    #32847358
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что собственно сделал "классический test" ?
Оболочка взяла и сделала из *.txt список файлов.
А затем вставила отдала его test-у
ему это есессна [: too many arguments

что делает zsh?

Он понимает, что test-у пытаются сунуть globbing и отрабатывает это корректно


Проведем эксперимент:

$ zsh -c "/usr/bin/\[ -f *.txt ] && echo OK"
/usr/bin/[: too many arguments

но:

$ zsh -c "[ -f *.txt ] && echo OK"
OK
...
Рейтинг: 0 / 0
проверка существования файлов
    #32847653
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вроде ясно
действ., скрипты ( так более понятно )
Код: plaintext
1.
2.
3.
4.
5.
#!/bin/zsh
if /usr/bin/test -f *.txt
 then
  echo OK
fi
и
Код: plaintext
1.
2.
3.
4.
5.
#!/bin/zsh
if test -f *.txt
 then
  echo OK
fi
дают разные рез-ты

спасибо.

P.S.

Интересно тогда про unix SCO OpenServer, там тогда либо классический test переработан
либо ksh ...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
# ls /bin/test
/bin/test
# /bin/\[ -f *.log ] && echo OK
OK
# ?
ksh: ?:  not found
# uname -svrm
SCO_SV  3 . 2   5 . 0 . 6  i386
#
???
...
Рейтинг: 0 / 0
проверка существования файлов
    #32847988
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, велик и могуч SCO Open Server.
Я к сож. не имею щас доступа к такому, потому скажите
хоть, это только в ksh или и в других оболочках?
...
Рейтинг: 0 / 0
проверка существования файлов
    #32848121
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну , выбор там невелик
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
# cat /etc/shells
#       @(#) shells  59 . 1   96 / 11 / 15 
#
/bin/csh
/bin/sh
/bin/ksh
/usr/bin/scosh

по кр. мере в sh это тоже работает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
# cd /var/adm
# ls *.log
pmd.log
rc0.log
rc2.log
snmpd.log
# sh -c "[ -f *.log ] && echo OK"
OK

Действ. получается что могуч
...
Рейтинг: 0 / 0
проверка существования файлов
    #32848185
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это еще и от системы значит зависит.

Сейчас попробовал в UWIN (posix среда для виндоуса) -
там это прошло для всех шеллов.

В общем, не советовал бы на это полагаться, а сделать универсальное решение.
...
Рейтинг: 0 / 0
проверка существования файлов
    #32849389
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
согласен
предлагаю сделать так , пример проверки сущ. log файлов в текущем дир-ии
Код: plaintext
1.
[ `ls ./*.log  2 >/dev/null | wc -l` -ne  0  ] && echo OK
...
Рейтинг: 0 / 0
проверка существования файлов
    #32849444
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага :) или так

[ -f `echo *.log | awk '{print $1}'` ] && echo OK
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / проверка существования файлов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]