从 shell 脚本更新 HISTSIZE

从 shell 脚本更新 HISTSIZE

我使用 grep + sedHISTSIZE使用以下命令更新 bash 配置文件中的变量:

if grep -q "^HISTSIZE=" /etc/profile ; then
  sed -n -i 's/HISTSIZE=.*/HISTSIZE=10000/g' /etc/profile
else
  echo 'HISTSIZE=10000' >> /etc/profile
fi

是否可以使用 sed 或 awk 或任何其他工具在一行中完成更新 bash 中的任何环境变量?

答案1

使用awk

awk -F= -v k=HISTSIZE -v v=10000 '
  $1==k{$2=v;s=1};1;
  END{OFS="=";if(!s)print k,v}
' /etc/profile > /etc/profile.tmp && mv /etc/profile.tmp /etc/profile

使用 GNU awk,您可以编辑到位

awk -i inplace  -F= -v k=HISTSIZE -v v=10000 '
   $1==k{$2=v;s=1};1;
 END{OFS="=";if(!s)print k,v}
' /etc/profile

如果您只需要更改当前用户的设置,您可能需要使用~/.profile而不是/etc/profile.

相关内容