LINUX.ORG.RU

Симлинк не файл?

 ,


0

1

Доброго дня господа.
Наткнулся на то, что не -a ни -e ни остальные не признают симлинк (который указывает на не существующий файл) фалом, как таковым.
Это верное поведение?
Если да, что такое, тогда, симлинк?
Заранее спасибо адекватно ответившим.

честно говоря - не понял я, что значит «не -a ни -e ни остальные», но в Krusader`е симлинки, указывающие на несуществующие файлы - открываются именно, как файлы.

anonymous
()

симлинк - это файл-ссылка, так что всё ок

xsektorx ★★★
()

Почему не файл? файл.

Просто он относится не к обычным (regular), а к специальным (special) файлам. Соответственно и обрабатывается.

PS: В доках же всё подробнейшим образом разжёвано. И в книжках про unix/linux. И даже у Танненбаума.

DeVliegendeHollander ★★
()
Ответ на: комментарий от anonymous

И правда немного ахинеевато написал.
Если проверять через if, файл ли это - проверку не проходит, в том случае, если симлинк указывает на файл, которого не существует.
Т.е. [ -e $path_to_file ] - скажет что файла не существует.

Spirit_of_Stallman ★★★
() автор топика

test (1,1p):

Except for -h and -L, all FILE-related tests dereference symbolic links.

Т.е. все проверки выполняются для того файла, на который симссылка указывает, естественно, если он не существует, то никакое условие не удовлетворяется.
-L же всегда для симссылки выдаст истину, битая она или нет.

ABW ★★★★★
()
Ответ на: комментарий от DeVliegendeHollander

PS: В доках же всё подробнейшим образом разжёвано.

Я не нашел, потому и спросил. А где конкретно это можно увидеть?

Spirit_of_Stallman ★★★
() автор топика
Ответ на: комментарий от ABW

Ну, за -h и -L я то знал.
Пробел был в понятии что это спецфайл, а не файл, что указывает на другой.

Spirit_of_Stallman ★★★
() автор топика
Ответ на: комментарий от Spirit_of_Stallman

[ -h $path_to_file ] либо [ -L $path_to_file ]. man test, в общем

dexpl ★★★★★
()
Ответ на: комментарий от DeVliegendeHollander

А то я этого не видел.
Но как трактовать, тут не сказано:
1) существует сам симлинк
2) существует файл, на который он ссылается

Spirit_of_Stallman ★★★
() автор топика
Ответ на: комментарий от Spirit_of_Stallman

Приведённая мной выше цитата — из man bash, раздел «CONDITIONAL EXPRESSIONS».

У Тейнсли есть целая глава про проверки условий, в ABS это описано подробно.

Да много где.

DeVliegendeHollander ★★
()
Ответ на: комментарий от Spirit_of_Stallman

Но как трактовать

Ох, елки зелёные...

Английским по терминалу же написано: «Истина, если файл существует и является символической ссылкой». Какие тебе ещё трактовки нужны? Что непонятно?

DeVliegendeHollander ★★
()

[ ! -f $file ] && [ -L $file ] && echo «broken symlink»

aol ★★★★★
()
Ответ на: комментарий от DeVliegendeHollander

Кстати, если в man bash посмотреть на те флаги, что выше -h описаны, то пользуясь обычной бытовой логикой, можно понять, что -h (и -L ниже) предназначены именно для проверки существования самого файла символической ссылки, а не того, на который он ссылается.

Для меня это как-то само собой очевидно было.

DeVliegendeHollander ★★
()
Ответ на: комментарий от DeVliegendeHollander

Английским по терминалу же написано: «Истина, если файл существует и является символической ссылкой». Какие тебе ещё трактовки нужны? Что непонятно?

Великая Вселенная..
Имеем симлинк на не существующий файл. Проводим проверку (-h -L). Файл (сам симлинк) существует? ДА Это симлинк? ДА
Но тем не менее проверка даст отрицательный результат.
Логика тут не такая уж и совершенная и очевидная.

Spirit_of_Stallman ★★★
() автор топика
Последнее исправление: Spirit_of_Stallman (всего исправлений: 1)
Ответ на: комментарий от Spirit_of_Stallman

А вот тут ты взял и всё в кучу свалил. И уже вообще никакой логики.

Вот же тебе наглядный пример привели. Вот в нём я вижу логику.

Когда ты проверяешь, ты должен осознавать, что именно ты проверяешь — саму смволическую ссылку или тот файл, на который она ссылается, — так или нет?

И просматривая ключи для if([), ты подбираешь именно тот, который нужен для решения поставленной задачи. Иначе у тебя просто задача поставлена неправильно или вообще не поставлена.

DeVliegendeHollander ★★
()

Наткнулся на то, что не -a ни -e ни остальные не признают симлинк (который указывает на не существующий файл) фалом, как таковым.

симлинк НЕ является регулярным файлом

-f FILE FILE exists and is a regular file

но вообще говоря, симлинк разименовывается:

Except for -h and -L, all FILE-related tests dereference symbolic links.

потому [ -f FILE ] проверяет НЕ FILE, а то, на что указывает симлинк FILE. Если он никуда не указывает, то файл очевидно не существует. -e тоже даст false.

Что тебе неясно?

drBatty ★★
()
Ответ на: комментарий от Spirit_of_Stallman

Проводим проверку (-h -L). Файл (сам симлинк) существует? ДА Это симлинк? ДА

man test слабо было набрать? (`test' == `[' за исключением проверки на `]')

drBatty ★★
()

не -a ни -e ни остальные

бульбец Титанику!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от DeVliegendeHollander

Через 5ть минут, как написал сообщение - уже был в дороге домой, по холодной улице.
Разум вернулся ко мне и я понял что это уже чепухи намолол, где люди и кони..
Однозначно не прав.

Spirit_of_Stallman ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.