проблема со скриптом unix

проблема со скриптом unix

У меня есть простой скрипт, который работает на машине FreeBSD со следующим кодом:

#!/bin/sh
`sed -i .bak '\:#start 172.0.0.3:,\:#end 172.0.0.3:d' /usr/local/etc/racoon/racoon.conf`
echo $?

Он должен удалить блок текста между двумя шаблонами.

Проблема в том, что если я запускаю команду sed непосредственно из оболочки, то она работает, а если я запускаю скрипт, то код возврата равен 0.

Почему это?

решение1

Вам нужно убрать обратные кавычки и заменить одинарные кавычки на двойные:

#!/bin/sh
ip=$1
echo $ip
sed -i .bak "\:#start ${ip}:,\:#end ${ip}:d" /usr/local/etc/racoon/racoon.conf

Использование двойных кавычек позволит расширить переменные. Обратные кавычки попытаются выполнить стандартный вывод команды (которого в данном случае нет). Например, если вы `echo hi`это сделаете, то попытаются выполнить "hi" как команду. sedвсегда возвращает 0, если нет ошибки, независимо от того, была ли сделана замена.

решение2

Обратные кавычки на самом деле не нужны (или, возможно, я неправильно вас понял). Тот факт, что скрипт возвращает 0, также ожидаем: код выхода 0 — это нормально. Редактировать: sed всегда будет выходить с 0, даже если не было никакой замены. Другой код выхода генерируется только тогда, когда в вашем синтаксисе есть ошибка.

Еще интереснее: удален код или нет?

Судя по вашим комментариям, у вас, вероятно, проблема с регулярным выражением и/или экранированием символов в нем.

Связанный контент