Получение истинного абсолютного пути сценария в / bin / sh

Я ищу способ получить реальный абсолютный путь к текущему сценарию /bin/sh . Он должен работать для таких ситуаций, как этот:

 /path/to/symlink/in/PATH/somescript -> ../../Package/current/bin/somescript.sh 

… где ../../Package/current сам по себе является символической v1.23 указывающей на v1.23 .

Важные предположения: мы предполагаем, что readlink доступен, но необязательно имеет параметр -f .

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

Ниже я приложу свою лучшую попытку, но это кажется мне чересчур излишним. Есть ли более простой способ?


Вот моя версия:

 path_to_script () { TARGET="$1" BASENAME="$(basename "$TARGET")" ( cd -P "$(dirname "$TARGET")" if [ -h "$BASENAME" ] then path_to_script "$(readlink "$BASENAME")" else echo "$PWD/$BASENAME" fi ) } PATH_TO_SCRIPT="$(path_to_script "$0")" 

В основном, он рекурсивно следует символическим ссылкам, используя cd -P для разрешения символических ссылок в путях.

One Solution collect form web for “Получение истинного абсолютного пути сценария в / bin / sh”

Я думаю, что это не только короче, но и легче читать; YMMV.

 path_to_script () { if ! [ -L "$1" ]; then echo "$1" else path_to_script "$(readlink "$1")" fi } 
  • Шелл-скрипт для печати наиболее посещаемых каталогов
  • Bash: Почему используется eval и shift в скрипте, который анализирует аргументы командной строки?
  • Каталоги перечислены дважды
  • Найти и заменить имя хоста на ip-адрес в файле
  • Как удалить папки, созданные с именами дат 2016-04-03 до 2016-10-4
  • Получение липкого фонового терминала, работающего на рабочем пространстве bspwm в полноэкранном режиме
  • В командной строке я могу перенаправить вывод в файл WITHOUT>, >> или | операторы?
  • автоматически загружать сценарии оболочки из / usr / bin
  • wait bash-builtin сжигает CPU на 100 процентов
  • Разделить вход для другой команды и объединить результат
  • cat to stderr при чтении до конца маркера файла
  • Добавление 2 переменных в файл в сценарии ожидания
  • Interesting Posts

    Почему нет / bin / login в выводе ps при входе в систему

    Есть ли все равно, чтобы автоматически монтировать файловую систему, когда я открываю символическую ссылку на каталог в этой файловой системе?

    Как заставить tar жестко привязать идентичный контент «на лету» во время создания архива?

    Что я могу сделать, чтобы сделать переход на какое-то новое компьютерное оборудование безопасным и плавным?

    Файловая система Suse работает только для чтения

    urxvt Открыть новую вкладку с тем же текущим каталогом, что и текущая вкладка

    Стандартный и переносимый способ отправки электронной почты с консоли?

    Локальная блокировка файлов на NFS, зависящая от ядра Linux

    awk или sed в нижнем регистре / в верхнем регистре только один символ в строке?

    iptables и RETURN target

    Как обычный пользователь может запускать задачу root cron немедленно, без задержки?

    Перезагрузка Asus UX303UA вместо возобновления с приостановки (ubuntu 15.10)

    / dev / sda2 отправлено 49710 дней без проверки, проверьте принудительный

    Ядерная паника после создания ядра в Red Hat Linux?

    Сделать qmail dequeue только в течение определенного периода времени в день

    Linux и Unix - лучшая ОС в мире.