Показать содержимое символической ссылки

Предложенное исправление, найденное на форуме FreeBSD ] заключается в создании файла ~/.xinitrc и вызове из него менеджера рабочего стола, в моем случае lumina. В файле .xinitnrc также должен быть установлен исполняемый бит.

Например:

cat << EOF > ~/.xinitrc
exec start-lumina-desktop
EOF

chmod a+x ~/.xinitrc

После этого изменения я могу войти в систему, используя slim.

0
11.10.2016, 02:52
4 ответа

Одна из вероятных причин кажущейся разницы в выводе ls -l между zsh и bash - это использование Tab -дополнение с включенным AUTO_REMOVE_SLASH в zsh (значение по умолчанию ).

AUTO_REMOVE_SLASH

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

При вводе ls -l symb Tab оба zsh и bash завершат это до ls -l symboliclink / ] (обратите внимание на / в конце). Разница в том, что zsh (с включенным AUTO_REMOVE_SLASH ) удалит косую черту, если вы просто нажмете Enter (т.е. завершите команду).

Таким образом, вы эффективно запустите ls -l symboliclink / в bash , который сообщает ls -l искать ссылку.Но в zsh вы запустите ls -l symboliclink , который сообщает ls -l , что вы хотите видеть информацию о ссылке, а не о целевом каталоге.

ls без опции -l всегда будет показывать содержимое целевого каталога, независимо от того, есть ли / в конце или нет.


Чтобы zsh не удалял косую черту в конце, достаточно просто ввести ее явно после завершения TAB . Обычно это не приводит к видимому изменению заполненного текста, но если вы введете пробел или подтвердите команду, / останется. «Обычно», потому что можно установить выделение для автоматически добавляемых символов суффикса, например пурпурного и полужирного:

zle_highlight[(r)suffix:*]="suffix:fg=magenta,bold"

( Примечание: это может не работать при использовании внешнего ZSH плагина подсветки синтаксиса )

Другое решение (очевидно) - отключить AUTO_REMOVE_SLASH . Это можно сделать с помощью

setopt noautoremoveslash
6
28.01.2020, 02:13

Это ls вариант -H :

ls -lH  symboliclink

От man 1p ls :

-H

Если в командной строке указана символическая ссылка, ссылающаяся на файл типа directory, ls должна оценить информацию о файле и типе файла как те, которые содержатся в файле, на который указывает ссылка. , а не сама ссылка; однако ls должен записывать имя самой ссылки, а не файла, на который ссылается ссылка.

Также обратите внимание на параметр -L

-L

Оценить информацию о файле и тип файла для всех символических ссылок (названных в командной строке или встречающихся в файловой иерархии), чтобы они соответствовали файлу, на который ссылается ссылка, а не сама ссылка; однако ls должен записывать имя самой ссылки, а не файла, на который ссылается ссылка. Когда -L используется с -l, записывать содержимое символических ссылок в длинном формате (см. Раздел STDOUT).

9
28.01.2020, 02:13

Поведение программы ls не зависит от вызывающей ее оболочки. Если вы наблюдаете разное поведение ls в bash и в zsh, это потому, что у вас есть псевдоним (или функция) с именем ls в одной из оболочек, но нет в другой. Поведение, которое вы наблюдаете в zsh, соответствует тому, что делает ls , поэтому вы должны вызывать его с дополнительными параметрами в bash.

Вы могли использовать псевдонимы с ls до ls -H или ls -L , чтобы разыменовать символические ссылки. Это плохая идея, потому что тогда вы не сможете получить информацию о самих символических ссылках, кроме как обойдя псевдоним ( \ ls ).

Если файл представляет собой символическую ссылку на каталог, вы можете воздействовать на каталог, а не на файл, добавив косую черту в конце: ls -l symboliclink / эквивалентно ls -l символическая ссылка /. . См. Когда символическая ссылка рассматривается как объект, на который она ссылается, и как символическая ссылка?

2
28.01.2020, 02:13

Просто добавьте "/" в конце.

ls -l symboliclink/
5
28.01.2020, 02:13

Теги

Похожие вопросы