Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何从文件中读取变量,修改并将其安全保存到其他变量 我想要的:_Linux_Bash_Shell_File_Sed - Fatal编程技术网

Linux 如何从文件中读取变量,修改并将其安全保存到其他变量 我想要的:

Linux 如何从文件中读取变量,修改并将其安全保存到其他变量 我想要的:,linux,bash,shell,file,sed,Linux,Bash,Shell,File,Sed,有一个包含变量的文件/scripts/backup/config.cfg。就我的具体情况而言,重要的是: BACKUPLOCATION="" ROOTLOCATION="/backup" 然后是一个脚本/scripts/backup/performBackup.sh 出于特定原因,我希望脚本的一部分执行以下操作: 读取变量ROOTLOCATION 添加(“/”和)时间戳(日期和时间) 将新创建的值安全保存到反上传位置(通过替换其当前值) 例子 如果这是c

有一个包含变量的文件
/scripts/backup/config.cfg
。就我的具体情况而言,重要的是:

BACKUPLOCATION=""
ROOTLOCATION="/backup"
然后是一个脚本
/scripts/backup/performBackup.sh

出于特定原因,我希望脚本的一部分执行以下操作:

  • 读取变量
    ROOTLOCATION
  • 添加(“/”和)时间戳(日期和时间)
  • 将新创建的值安全保存到
    反上传位置
    (通过替换其当前值)
  • 例子 如果这是
    config.cfg
    的先前状态:

    BACKUPLOCATION="dummy"
    ROOTLOCATION="/backup"
    
    脚本运行后,应为:

    BACKUPLOCATION="/backup/2020-05-02-23-00"
    ROOTLOCATION="/backup/"
    
    我试过的 首先,使用

    然后我尝试使用
    sed
    命令,但是引号把我弄糊涂了。这里有一次尝试(没有成功):

    试试这个:

    source /scripts/backup/config.cfg
    sed -i 's|BACKUPLOCATION=.*|BACKUPLOCATION="'"$ROOTLOCATION/$(date +%Y-%m-%d-%H-%M)"'"|' /scripts/backup/config.cfg
    

    sed的问题是使用了
    /
    作为分隔符,它在扩展后出现在
    $ROOTLOCATION
    中,因此sed失败。我使用了
    |
    ,它通常不存在于文件名中。如果您使用
    |
    创建文件,该sed也将失败!因此,“了解您的数据”:

    欢迎来到stackoverflow。请不要包括“你好”或类似的内容。有关更多信息,请参见此处:您选择了
    /
    作为sed替换的分隔符,但您的字符串包含未替换的
    /
    。选择其他内容,如逗号:
    sed-i's,BACKUPLOCATION\=.*,BACKUP…
    请查看上的页面;如果唯一的问题是在编辑中,那么就没有必要告诉我们您打算进行的读-编辑-写操作。@Beta因为我现在不知道问题的确切根源,我认为如果一般方法是错误的,我最好解释一下背景。但我在将来会记住这一点。感谢you@Techflix对于初学者来说,你做得相当不错,但有时会出现一些微妙之处。
    sed -i 's/BACKUPLOCATION\=.*/BACKUPLOCATION="'$ROOTLOCATION/$(date +%Y-%m-%d-%H-%M)'"/' /scripts/backup/config.cfg
    
    source /scripts/backup/config.cfg
    sed -i 's|BACKUPLOCATION=.*|BACKUPLOCATION="'"$ROOTLOCATION/$(date +%Y-%m-%d-%H-%M)"'"|' /scripts/backup/config.cfg