Вы должны удалить косую черту перед тем, как вывести последнее поле с помощью awk. Иначе последнее поле будет пустым.
Используйте
echo "$url" | sed -e 's#/$##' -e 's/\.git$//' | awk -F / '{print $NF}'
или даже
echo "$url" | sed -e 's#/$##' -e 's/\.git$//' -e 's#^.*/##'
Советы:
sed
одному вызову sed, поэтому иногда нет необходимости передавать команды из sed
в sed
. Либо sed -e 'cmd1' -e 'cmd2' ...
или sed 'cmd1;cmd2;...'
будут работать. s
команды sed
, чтобы не экранировать слеши в шаблоне (я использовал #
в качестве разделителя). Ошибка не в том, что у вас уже установлено другое устройство ISO; mount -o loop
всегда будет получать первое неиспользуемое шлейфовое устройство или создавать новое.
И это не потому, что один и тот же ISO-образ/петлевое устройство уже смонтировано в другом каталоге --одно и то же устройство может быть смонтировано в разных точках монтирования одновременно.
Вероятно, вы пытаетесь дважды смонтировать один и тот же ISO-образ в одну и ту же точку монтирования. Утилита mount(8)
попытается защитить вас от этого, проверив, не прикреплен ли уже резервный файл к петлевому устройству, и повторно используя это устройство, вместо того, чтобы прикреплять один и тот же файл к нескольким петлевым устройствам.
Но если вы действительно хотите это сделать, вы можете обойти проверку, присоединив петлевое устройство вручнуюlosetup
:
# mount -o ro a.iso dir/
# mount -o ro a.iso dir/
mount: /tmp/a.iso is already mounted
# losetup --show -f a.iso
/dev/loop1
# mount -o ro /dev/loop1 dir/
#
Два вместе:
# dev=$(losetup --show -f a.iso) && { mount -o ro "$dev" dir/ || losetup -d "$dev"; }
Затем вы должны явно использовать параметр -d
для umount(8)
или после этого отсоединить цикл вручную с помощьюlosetup -d
:
# umount -d dir/
Это должно быть довольно безопасно с файловыми системами -только для чтения, такими как ISO. Никогда не используйте его с файловыми системами, смонтированными в режиме чтения -записи.