Это задокументировано на вики Ubuntu . По умолчанию он установлен для уменьшения количества зависимостей в пакетах, но, как вы обнаружили, это означает, что порядок библиотек имеет значение :, вам необходимо убедиться, что объекты (любого типа )появляются до ] библиотеки, которые они используют.
Вы можете отключить это с помощью --no-as-needed
.
Я полагаю, вы могли бы использовать цикл выбора:
select dir in *; do cd -- "$dir"; break; done
Однако на самом деле это больше, чем обычное использование cd
, но вы можете сделать из этого функцию:
cdls () {
local PS3='cdls>'
select dir in *; do
if [[ -d "$dir" ]]; then
cd -- "$dir"
break
else
printf '%s\n' "You can only cd into a directory" >&2
fi
done
}
Кроме того, в первую очередь не имеет особого смысла показывать файлы каталога, не относящиеся к -, поскольку вы не можете cd
в них зайти, поэтому вы можете просто:
cdls () {
local PS3='cdls>'
select dir in */; do
cd -- "$dir"
break
done
}
Если вы спросите: «Как мне cd
перейти к 4-му элементу в списке ls
?», тогда
cd "$(ls | tail -n +6 | head -n 1)"