Да, будет работать корректно.
a=$(declare -f cd);
И
b='cd ()
{
prev_cd "$@";
echo "botch cd hook invoked.";
run_botch
}'
Соответствует правильно:
[[ "$a" == "$b" ]] && echo match
Звездочки не нужны.
Одно предостережение: расширение команды a=$(declare -f cd)
удаляет все пробелы в конце (с IFS по умолчанию ). Поэтому переменная b
заканчивается на:
}'
, а не с
}
'
, что приведет к сбою (точного )совпадения.
Если вы хотите проверить, существует ли какая-либо строка внутри переменной a
, вам нужны звездочки:
[[ $a == *run_botch* ]] && echo match
Кавычки необязательны (слева ), справа кавычки могут изменить интерпретацию строки.
На самом деле это ожидаемое поведение. Ваша команда создаст ссылки на текущее содержимое каталога /my/source/.
Простое решение — связать сам каталог:
ln -s /my/source./
будет создана ссылка вида:
source -> /my/source
Но также inotifytools можно использовать для просмотра каталога и выполнения действий.