Вы принимаете вывод sudo md5sum $i
и направляют его в седло, которое не работает как корень. sudo даже не знает, что это sed существует.
Но это не проблема, потому что sed не нуждается в разрешениях root. Проблема > ${NAME}...
. Это перенаправляет вывод sed в файл с этим именем. Но перенаправление фактически выполняется вашей оболочкой, которая работает как ваш пользователь. И поскольку >
- это встроенный в оболочку оператор, вы не можете его префикс sudo.
Простым решением является использование tee
. tee
- это программа (поэтому вы можете запускать ее с помощью sudo), которая записывает ее вход в стандартный вывод, а также в файл (например, T-Pipe, отсюда и название). Таким образом, вы можете просто:
for i in ${NAME}*
do
md5sum $i | sed -e "s/$i/${NAME}/" | sudo tee ${NAME}.md5${i/#${NAME}/}
done
Примечание это также будет сбрасывать все хэши в свой стандартный вывод.
Я использовал вышеприведенную команду, получив ошибку ((sed: -e выражение # 1, char 0: нет предыдущего регулярного выражения)) – Sherry
@Sherry, который выглядит как совершенно не связанная проблема. Это может произойти, например, если значение '$ i' пуст. Добавьте строку 'echo 'i = $ i" 'перед строкой' md5sum ... 'и убедитесь, что значение верно – janos