linux 添加a记录,linux-在/ etc / environment中添加或更新配置记录

我的/ etc / environment看起来像这样:

cat /etc/environment

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

我希望使用一个命令(sed,awk,python等),使其看起来像这样:

cat /etc/environment

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

JAVA_HOME="/usr/lib/jvm/java-6-sun"

现在的问题是,我宁愿它是1衬板(在sed -XYZ / DoMagic / / etc / environment的字段中),它需要包含合并逻辑,即-追加新的配置记录或更新现有的.最重要的是,它应该防止文件看起来像这样:(由经验丰富的Shell脚本编写者在每次调用时调用echo>>引起)

cat /etc/environment

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

JAVA_HOME="/usr/lib/jvm/java-5-sun"

JAVA_HOME="/usr/lib/jvm/java-6-sun"

JAVA_HOME="/usr/lib/jvm/java-6-sun"

JAVA_HOME="/usr/lib/jvm/java-6-sun"

我想这是一个技巧性的问题,因为我想避免使用自定义脚本,例如

/usr/local/bin/PropUpdate /etc/environment JAVA_HOME "/usr/lib/jvm/java-6-sun"

/usr/local/bin / PropUpdate是以下脚本(为了示例而编写,可能包含错误.不胜感激)

#!/bin/bash

# Append/Update a configuration record in a file

#

# Usage example:

# /usr/local/bin/PropUpdate /etc/environment JAVA_HOME "/usr/lib/jvm/java-6-sun"

#

# Author Maxim Veksler

# Version 0.5-2010-07-27

EXPECTED_ARGS=3

E_BADARGS=3

E_BADFILE=4

if [[ $# -ne ${EXPECTED_ARGS} ]]; then

echo "Usage: `basename $0` /path/to/config.conf ParameterName newValueText" >&2

exit $E_BADARGS

fi

CONFIGURATION_FILE="$1"

CONFIGURATION_PARAMETER="$2"

CONFIGURATION_VALUE="$3"

if [[ ! -e "${CONFIGURATION_FILE}" ]]; then

echo "Configuration file ${CONFIGURATION_FILE} does not exist" >&2

exit $E_BADFILE

fi

if [[ ! -w "${CONFIGURATION_FILE}" ]]; then

echo "Can't modify ${CONFIGURATION_FILE}" >&2

exit $E_BADFILE

fi

#########################################

## Decide what parameter we are adding ##

#########################################

__param_found=0

# First check CONFIGURATION_PARAMETER supplied by use that contains "="

if [[ ${CONFIGURATION_PARAMETER} == *=* ]]; then

# It should exist in the file, plain

if grep -qE "^${CONFIGURATION_PARAMETER}" "${CONFIGURATION_FILE}"; then

__param_found=1

SUFFIX_REGEX='[[:space:]]*'

fi

else

# OK, sophisticated user, did not send "=" with the parameter...

if grep -qE "^${CONFIGURATION_PARAMETER}[[:space:]]*=" "${CONFIGURATION_FILE}"; then

# Let's check if such configuration with Parameter + "=" exists

__param_found=1

SUFFIX_REGEX='[[:space:]]*=[[:space:]]*'

elif grep -qE "^${CONFIGURATION_PARAMETER}[[:space:]]+" "${CONFIGURATION_FILE}"; then

# If such parameter exists, at all

__param_found=1

SUFFIX_REGEX='[[:space:]]\+'

fi

fi

if [[ $__param_found == 1 ]]; then

#echo sed -i "s|^\(${CONFIGURATION_PARAMETER}${SUFFIX_REGEX}\).*$|\1${CONFIGURATION_VALUE}|g" "${CONFIGURATION_FILE}"

sed -i "s|^\(${CONFIGURATION_PARAMETER}${SUFFIX_REGEX}\).*$|\1${CONFIGURATION_VALUE}|g" "${CONFIGURATION_FILE}"

else

if [[ ${CONFIGURATION_PARAMETER} == *=* ]]; then

# Configuration parameter contains "=" in it's name, good just append

echo "${CONFIGURATION_PARAMETER}${CONFIGURATION_VALUE}" >> "${CONFIGURATION_FILE}"

else

# Try to guess if this file is a "param = value" or "param value" type of file.

if grep -qE "^[[:alnum:]]+[[:space:]]*=" "${CONFIGURATION_FILE}"; then

# Seems like a "param = value" type of file

echo "${CONFIGURATION_PARAMETER}=${CONFIGURATION_VALUE}" >> "${CONFIGURATION_FILE}"

else

# Seems like a "param value" type of file

echo "${CONFIGURATION_PARAMETER} ${CONFIGURATION_VALUE}" >> "${CONFIGURATION_FILE}"

fi

fi

fi

#cat $CONFIGURATION_FILE

谢谢,

格言.

-更新:我实际上有点喜欢这个脚本,所以我对其进行了一些改进.现在看来已经可以生产了.请享用.

解决方法:

如我在my answer to a relevant question中所述,您可以尝试在/etc/profile.d/中使用您自己的名称创建文件,而不必尝试解析/ etc / environment文件,而是可以在安装过程中将其复制过来,因为它只包含您的内容.更不用说它会使您的脚本更短.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值