我正在为项目创建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中级用户,但这超出了我的技能范围,我不相信自己可以做到这一点。
答案 0 :(得分:2)
您可以使用此实用程序功能搜索给定文件,并且仅在文件中找不到字符串时才追加:
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}
使用默认值。如果参数未设置或为null,则替换单词的扩展名。否则,将替换参数的值。