Можно вставить его Ваш .bash_profile
, который выполняется каждый раз, когда Вы входите в систему.
Или, если это - псевдоним для долгой команды, можно вставить это Ваш .bash_aliases
файл в соответствии с Вашим корневым каталогом:
alias short_version="very long command here"
Я не думаю, что существует такая утилита. С GNU readlink
, Вы могли сделать что-то как:
is_in() (
needle=$(readlink -ve -- "$1" && echo .) || exit
haystack=$(readlink -ve -- "$2" && echo .) || exit
needle=${needle%??} haystack=${haystack%??}
haystack=${haystack%/} needle=${needle%/}
case $needle in
("$haystack" | "$haystack"/*) true;;
(*) false;;
esac
)
Это разрешает все символьные ссылки для окончания с каноническим полным путем и для иглы и для стога сена.
-e
вместо -f
поскольку мы хотим удостовериться, что файлы существуют. -v
опция дает сообщение об ошибке, если к файлам нельзя получить доступ.--
должен использоваться для маркировки конца опций и заключающий в кавычки, поскольку мы не хотим вызывать split+glob оператор здесь./foo<LF><LF>
, $(readlink -ve -- "$1")
возвратился бы /foo
. Общее обходное решение для этого должно добавить символ non-LF (здесь .
) и полоса это и дополнительный символ LF, добавленный readlink
с var=${var%??}
(удалите последние два символа).Игла расценивается как являющийся в стоге сена, если это - стог сена или если это - стог сена/что-то. Однако это не работало бы, если бы стог сена был /
(/etc
для вместо этого не //something
). /
часто потребности, которые будут рассматривать особенно, потому что, в то время как /
и /xx
имейте то же количество наклонных черт, каждый - уровень выше другого.
Один способ обратиться к нему состоит в том, чтобы заменить /
с пустой строкой, которая является, покончили var=${var%/}
(единственный путь, заканчивающийся /
это readlink -e
/
, так удаление запаздывания /
изменяется /
к пустой строке).
Для канонизации путей к файлам Вы могли использовать функцию помощника.
canonicalize_path() {
# canonicalize paths stored in supplied variables. `/` is returned as
# the empty string.
for _var do
eval '
'"$_var"'=$(readlink -ve -- "${'"$_var"'}" && echo .) &&
'"$_var"'=${'"$_var"'%??} &&
'"$_var"'=${'"$_var"'%/}' || return
done
}
is_in() (
needle=$1 haystack=$2
canonicalize_path needle haystack || exit
case $needle in
("$haystack" | "$haystack"/*) true;;
(*) false;;
esac
)
Я решил проблему как это:
echo $abs_link_target | grep -qe "^$containing_dir"
$abs_link_target
переменная содержит абсолютный путь к цели символьной ссылки (расширенный через readlink -f
). Я затем проверяю, чтобы видеть, соответствует ли начало пути назначения началу $containing_dir
$containing_dir
взятый в качестве regexp)
– Stéphane Chazelas
09.01.2014, 10:28
/foo<LF>/abc
(строки строки образца рассматривают как различные шаблоны для соответствия),
– Stéphane Chazelas
09.01.2014, 10:30
/foo<LF>/abc
находится в /abc
(grep
соответствия на каждой строке входа, не целый вход так обычно не может использоваться для соответствия именам файлов).
– Stéphane Chazelas
09.01.2014, 10:55
echo
реализация и/или среда, у Вас будут проблемы с именами файлов, содержащими обратные косые черты echo
не должен действительно использоваться для обработки произвольных данных
– Stéphane Chazelas
09.01.2014, 10:56
anyfile.ext
существует и достижим (иначе, readlink -f
в противоположность readlink -e
не мог бы дать Вам корректный путь), и что получающийся путь не содержит символы новой строки (принимает zsh или bash4 или ksh93m + или выше). Отметьте это если anyfile.ext
точки к /foo/bar
самостоятельно, это скажет, что это не в.
– Stéphane Chazelas
10.01.2014, 13:56
needle=${needle%??} haystack=${haystack%??}
needle
с переменной имеют дело с первым, тогда как в следующей строке это наоборот? Кроме того, каким образом Вашreturn
операторы явно не возвращают ненулевое значение (для указания на ошибку)? Последний: имело бы смысл факторизовать все преобразование (вызов кreadlink
, плюс два суффиксных усечения) к отдельному_canonicalize_path
функция помощника? – kjo 22.02.2016, 14:28return
возвраты по умолчанию с состоянием последней команды. С|| return
, это позволяет возвращать состояние в соответствии с провальным приложением. 3) уверенный, но получающаяся функция, вероятно, не будет приятный вид. Я добавлю пример. – Stéphane Chazelas 22.02.2016, 14:48