Некоторые проблемы:
Стилистические
Вы, вероятно, должны заключить весь аргумент в echo, как
echo "ERROR: $1 is a subdirectory of $(readlink -e "$2")"
Без кавычек вокруг аргумента echo
, вы технически передаете каждое слово как его собственный параметр: echo "ERROR:somedir" "is" "a" "subdirectory"
.... Поскольку echo
выводит свои параметры в заданном порядке, разделенных пробелами, вывод то же самое в вашем случае. Но семантически это не то, что вы хотите.
(Пример, где все будет иначе:
echo foo bar
напечатает foo bar
.)
Сообщение об ошибке не работает
Если аргументы не существуют
$ ./check.sh nonexistent1 nonexistent2
ERROR:nonexistent1 is a subdirectory of
Очевидно, что это не имеет значения, если вы уже проверили, что они существуют.
Вам также необходимо проверить угловые случаи, например, когда параметры ссылаются на один и тот же каталог:
$ mkdir a b
$ ln -s ../a b/c
$ ./check.sh a b/c
ERROR:a is a subdirectory of /dev/shm/a
Не обнаруживает символические ссылки
$ mkdir a b
$ ln -s ../a b/c
$ ./check.sh a b
не выдает сообщение об ошибке.
Не обнаруживает mount --bind
$ mkdir a b b/c
$ sudo mount --bind a b/c
$ ./check.sh a b
не выдает сообщение об ошибке.