Назад | Перейти на главную страницу

readlink: недопустимая опция - f

Недавно скрипт работал нормально, но через несколько дней я получаю такое сообщение при запуске readlink -f "$0" команда:

readlink: illegal option -- f
usage: readlink [-n] [file ...]

Я запускал следующий код для отладки:

#!/bin/sh

DIR=`pwd`
RLPATH=`which readlink`
RLOUT=`readlink -f -- "${0}"`
DIROUT=`dirname -- ${RLOUT}`

echo "dir: ${DIR}"
echo "path: ${PATH}"
echo "path to readlink: ${RLPATH}"
echo "readlink output: ${RLOUT}"
echo "dirname output: ${DIROUT}"

Вывод:

# ./debug.sh
readlink: illegal option -- f
usage: readlink [-n] [file ...]
usage: dirname string [...]
dir: /home/svr
path: /sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/root/bin
path to readlink: /usr/bin/readlink
readlink output:
dirname output:

Что случилось ?

Это проблема с версией FreeBSD, которую вы используете. Старые версии не поддерживают параметр -f.

Самый простой способ обойти это - использовать порт GNU coreutils (/ usr / ports / sysutils / coreutils), который даст вам «greadlink». Это то, что я использую в своих скриптах.