Использование аргументов команды sed для совместимости с GNU и BSD Unix (редактирование на месте)

Если в двоичном файле для incrontab (который я не знаю, никогда не использовал) не установлен бит SGID, это может вызвать странное поведение такого типа.

Установите его с помощью chmod g + s / path / to / binary (/ usr / bin / incrontab, возможно?)

Вы можете проверить, установлено ли оно с помощью:

ls -l / path / to / binary

(пример)

ls -l /usr/bin/crontab
-rwxr-s--x 1 root crontab 44336 Jun 23 18:47 /usr/bin/crontab
3
03.03.2017, 16:23
3 ответа

Вместо:

cp app/index.html.mob MobileApp/www/index.html
sed -i'' "s#MOBILE_APP_API_URL#\"$mobile_app_api_url\"#g" MobileApp/www/index.html

Просто сделайте:

sed "s#MOBILE_APP_API_URL#\"$mobile_app_api_url\"#g" \
  < app/index.html.mob >  MobileApp/www/index.html

Вы также можете удалить зависимость от ksh93/bash, изменив верхнюю часть на:

environment=$1

case $environment in
  "") environment=beta;;
  live|beta) ;;
  *)
    printf >&2 'Invalid environment: "%s"\n' "$environment"
    exit 1;;
esac

См. также environment=${1:-beta}.

BTW, [[ $environment =~ (live|beta) ]] в ksh93 и bash проверяет, содержит ли $environment live или beta, что не похоже на то, что вы хотите. Вам нужно [[ $environment =~ ^(live|beta)$ ]] для проверки того, является ли оно live или beta.

0
27.01.2020, 21:25

Вы должны понимать, что $mobile_app_api_url не должен содержать символов которые являются значимыми для sed в RHS s///. Точнее говоря, вам нужно убедиться, что эта переменная содержит следующие правильно экранированные символы: viz.., & # \ newline перед их вставкой.

0
27.01.2020, 21:25

Сделайте это, чтобы обойти проблемные проблемы с переносимостью с флагом -i в sed:

sed 'sed-editing-commands' thefile >tmpfile && mv tmpfile thefile

Т.е. затем замените входной файл временным файлом, если команда sed не завершилась ошибкой.

Он переносим на все известные мне реализации sed.

Чтобы безопасно создать временное имя файла, используйте mktemp. Хотя это не стандартная утилита, она доступна на всех Unices, к которым у меня есть доступ (OpenBSD, NetBSD, Solaris, macOS, Linux):

tmpfile=$(mktemp)
sed 'sed-editing-commands' thefile >"$tmpfile" && mv "$tmpfile" thefile
2
27.01.2020, 21:25

Теги

Похожие вопросы