Учитывая каноническое имя пути, такое как ваше, это будет работать:
set -f --; IFS=/
for p in $pathname
do [ -e "$*/$p" ] || break
set -- "$@" "$p"
done; printf %s\\n "$*"
Это печатает через последний полностью существующий/доступный компонент $pathname
, и помещает каждый из них отдельно в массив arg. Первый несуществующий компонент не печатается, но сохраняется в $p
.
Вы можете подойти к этому противоположно:
until cd -- "$path" && cd -
do case $path in
(*[!/]/*)
path="${path%/*}"
;; (*) ! break
esac
done 2>/dev/null && cd -
Это либо вернется соответствующим образом, либо разделит $path
на части по мере необходимости. Он откажется от попытки изменить /
, но в случае успеха выведет в stdout как ваш текущий рабочий каталог, так и каталог, в который он изменится. Ваш текущий $PWD
также будет помещен в $OLDPWD
.
Ваш GCC не использует право as
,и, вероятно, не стал бы использовать право ld
; вам нужно добавить
--with-as=/usr/bin/arm-none-eabi-as --with-ld=/usr/bin/arm-none-eabi-ld
на вашу линию ./configure
.
Вы также можете столкнуться с проблемами, связанными с многоуровневым -подходом Debian, который GCC 5 не поддерживает напрямую. Лучше всего загрузить последний пакет Debian GCC 5.5 в виде исходного кода и использовать его (с исправлениями )для создания кросс-компилятора -. Затем он будет использовать библиотеку ARM C, которая была установлена как зависимость от установленного вами пакета cross -GCC.
dget https://snapshot.debian.org/archive/debian-debug/20180412T094604Z/pool/main/g/gcc-5/gcc-5_5.5.0-12.dsc
cd gcc-5-5.5.0
debian/rules patch
затем настройте и соберите, как раньше. (Игнорировать перекрестную -документацию по сборке в debian/README.cross
.)