Найдите устаревшую запись монтирования на сервере NFS:
showmount -a | grep ip_address_of_nfs_client
Если вы видите строки, связанные с IP-адресом клиента NFS и общим ресурсом, который вы пытаетесь смонтировать, удалите устаревшие записи из rmtab:
vi /var/lib/nfs/rmtab
Перезагрузите rpc.mountd, чтобы он увидел новый rmtab:
killall rpc.mountd ; /usr/sbin/rpc.mountd
Обратные кавычки требуют большего экранирования. Это одна из причин, по которой вы должны предпочесть$()
(см., например. «обратная косая черта» в этом ответе:В чем разница между $(stuff)
и `stuff`
?).
Из-за недостаточного экранирования внутри обратных кавычек точка, которую вы хотели экранировать, не экранируется, когда строка в конечном итоге интерпретируется как регулярное выражение.
Измените соответствующую строку на:
for file in $(locate --regex '^.*\.original$' | grep test); do
Примечания:
Я использовал одинарные -кавычки для удобства обработки обратной косой черты и звездочки. В вашем исходном коде звездочка без кавычек и без экранирования может вызвать расширение имени файла .
^.*
в регулярном выражении ничего не меняет. Одного -в кавычках \.original$
было бы достаточно. Я решил оставить ^.*
только для того, чтобы указать на возможность расширения имени файла.
Привыкайте к цитированию переменных(например.echo "$file"
). Связанный ответ также рекомендует цитировать $()
, но в нашем цикле for
цитирование было бы неправильным.Не цитировать $()
тоже неправильно. Оба неверны, потому что…
Вообще построение for
таких петель часто бывает неправильным . Это ловушка Баша номер один . Чтобы что-то сделать с выводом locate
, лучше направить его в xargs
, предпочтительно в виде строк, заканчивающихся нулем -:
locate -0 … | grep -z … | xargs -r0 …
Эти параметры не переносимы.