Предложенное исправление, найденное на форуме FreeBSD ] заключается в создании файла ~/.xinitrc
и вызове из него менеджера рабочего стола, в моем случае lumina. В файле .xinitnrc
также должен быть установлен исполняемый бит.
Например:
cat << EOF > ~/.xinitrc
exec start-lumina-desktop
EOF
chmod a+x ~/.xinitrc
После этого изменения я могу войти в систему, используя slim
.
Одна из вероятных причин кажущейся разницы в выводе 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
Это ls
вариант -H
:
ls -lH symboliclink
От man 1p ls
:
-H
Если в командной строке указана символическая ссылка, ссылающаяся на файл типа directory, ls должна оценить информацию о файле и типе файла как те, которые содержатся в файле, на который указывает ссылка. , а не сама ссылка; однако ls должен записывать имя самой ссылки, а не файла, на который ссылается ссылка.
Также обратите внимание на параметр -L
-L
Оценить информацию о файле и тип файла для всех символических ссылок (названных в командной строке или встречающихся в файловой иерархии), чтобы они соответствовали файлу, на который ссылается ссылка, а не сама ссылка; однако ls должен записывать имя самой ссылки, а не файла, на который ссылается ссылка. Когда -L используется с -l, записывать содержимое символических ссылок в длинном формате (см. Раздел STDOUT).
Поведение программы ls
не зависит от вызывающей ее оболочки. Если вы наблюдаете разное поведение ls
в bash и в zsh, это потому, что у вас есть псевдоним (или функция) с именем ls
в одной из оболочек, но нет в другой. Поведение, которое вы наблюдаете в zsh, соответствует тому, что делает ls
, поэтому вы должны вызывать его с дополнительными параметрами в bash.
Вы могли использовать псевдонимы с ls
до ls -H
или ls -L
, чтобы разыменовать символические ссылки. Это плохая идея, потому что тогда вы не сможете получить информацию о самих символических ссылках, кроме как обойдя псевдоним ( \ ls
).
Если файл представляет собой символическую ссылку на каталог, вы можете воздействовать на каталог, а не на файл, добавив косую черту в конце: ls -l symboliclink /
эквивалентно ls -l символическая ссылка /.
. См. Когда символическая ссылка рассматривается как объект, на который она ссылается, и как символическая ссылка?