Sed дает: sed: не могу прочитать: нет такого файла или каталога
у меня есть следующие bash
скрипт, который повторяется для каждого найденного изображения. Он должен перебирать все HTML-код, в CSS и js файлы и замените все вхождения изображения в этом файле.
for image in app/www/images-theme-dark/*.png
do
echo "installing icon" $image
# extract filename from iconpath
iconfile=$(basename $image)
iconPath="images/"$(basename $image)
# replace paths in all files containing icon paths
find app/www -type f ( -name "*.html" -or -name "*.css" -or -name "*.js"
-or -name "*.appcache" )
-exec sed -i '' -e 's|$iconPath|images-theme-dark/$iconfile|g' "{}" ;
done
однако, когда я запускаю скрипт sed
выдает:
sed: can't read : No such file or directory
на StackOverflow я нашел sed: не могу прочитать: нет такого файла или каталога но я уже в кавычки {}
когда я Echo sed
command и и выполнить его в командной строке вручную нет ошибки.
Я использую GNU sed v4.2.2 на Raspbian GNU / Linux 8.0 (jessie)
кто-нибудь видит, что здесь может быть не так?
1 ответов
(компиляция ответа из комментариев, ноу-хау Мельпомены и Алекса.)
что это ''
после sed -i
?
-i
значит на месте, то есть, редактировать в файл напрямую.-i ''
- означает изменение в файл, чье имя является пустой строкой.
Поскольку, вероятно, нет файла, имя которого является пустой строкой, sed жалуется, что он не может его прочитать.
Примечание 1 зависимость:
Синтаксис -i
является одним из различий между GNU sed и sed от mac os.
примечание 2."обычный" порядок аргументов:
The -e
переключатель для указания кода sed позволяет иметь его между именами файлов.
Это ловушка (в которую я, например, попал смущенно), заставляя вас спотыкаться о свои ожидания того, что вы найдете в командной строке sed.
Это позволяетsed -i filename -e "expression" AnotherFileName
что непреднамеренно замаскированная версияsed -i'NoExtensionGiven' "expression" filename AnotherFileName
.