Обнаружение существующей строки в файле в bash - PullRequest
0 голосов
/ 14 декабря 2018

Я создаю bash установочный скрипт для проекта.В нем мне нужно изменить количество дескрипторов файлов.Я делаю это, изменяя файлы /etc/security/limits.conf, /etc/pam.d/common-session и /etc/pam.d/common-session-noninteractive.

Вот код в bash installer script

echo "
*    soft nofile 64000
*    hard nofile 64000
root soft nofile 64000
root hard nofile 64000
" >> /etc/security/limits.conf
echo "session required pam_limits.so" >> /etc/pam.d/common-session
echo "session required pam_limits.so" >> /etc/pam.d/common-session-noninteractive

Проблема в том, если дляпо какой-то причине установка проекта завершается неудачно, и она проходит эту контрольную точку, после повторного запуска она будет снова добавлять эту строку в файлы.

Есть ли способ определить, существуют ли уже строки?в каждом из файлов, и если это не так, выполните сложение.

Я - пользователь промежуточного уровня bash, но это выходит за рамки моих навыков, и я не верю, что смогу сделать это самостоятельно.

1 Ответ

0 голосов
/ 14 декабря 2018

Вы можете использовать эту служебную функцию, которая ищет данный файл и добавляет, только когда строка не найдена в файле:

searchAppend() { grep -qF "$2" "$1" || echo "${3:-$2}" >> "$1"; }

, и используйте ее как:

str="
*    soft nofile 64000
*    hard nofile 64000
root soft nofile 64000
root hard nofile 64000
"
searchAppend /etc/security/limits.conf 'root soft nofile 64000' "$str"
searchAppend /etc/pam.d/common-session 'session required pam_limits.so'
searchAppend /etc/pam.d/common-session-noninteractive 'session required pam_limits.so'

Согласноman bash:

${parameter:-word} Использовать Значения по умолчанию .Если параметр не установлен или ноль, расширение слова заменяется.В противном случае подставляется значение параметра.

Справочник по расширению параметров оболочки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...