У каждого пользователя есть несколько php-файлов, использующих общую базу данных commondb . Я хочу перебрать всех пользователей (в users.csv) и в их домашней папке (например, /home /joe) найти все php-файлы рекурсивно и заменить каждое вхождение "commondb" на собственное имя базы данных, например "joedb" для "Джо".

Я пробовал следующее:

#!/bin/bash
# Execute like this:
# bash localize.bash users.csv

OLDIFS=$IFS
IFS=","
while read name dummy
  do
    echo $name
    find /home/${name} -name '*.php' -exec sed -i '' 's/commondb/${name}db/g' "{}" \;

  done < $1
IFS=$OLDIFS

для пользователей .csv

joe, Joe J
george, George G

Это не сбой, но файлы остаются без изменений. Я довольно слаб в Bash, и я не могу понять, как его отладить:/

Можно ли исправить мой скрипт для работы?

1 ответ1

0

Сначала я не видел ничего плохого в вашем коде. На самом деле я запустил его, и он работал нормально, за исключением того, что он заменил commondb на $ {name} вместо этого из-за использования одинарных кавычек в команде sed. Изменение двойных кавычек работало нормально.

#!/bin/bash
# Execute like this:
# bash localize.bash users.csv

OLDIFS=$IFS
IFS=","
while read name dummy
  do
    echo $name
    find /home/${name} -name '*.php' -exec sed -i '' "s/commondb/${name}db/g" "{}" \;

  done < $1
IFS=$OLDIFS

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .