edu*_*ike 135 variables bash configuration-files
我想为变量调用一个设置文件,我怎样才能在bash中执行此操作?
因此设置文件将定义变量(例如:CONFIG.FILE):
production="liveschool_joe"
playschool="playschool_joe"
Run Code Online (Sandbox Code Playgroud)
脚本将在其中使用这些变量
#!/bin/bash
production="/REFERENCE/TO/CONFIG.FILE"
playschool="/REFERENCE/TO/CONFIG.FILE"
sudo -u wwwrun svn up /srv/www/htdocs/$production
sudo -u wwwrun svn up /srv/www/htdocs/$playschool
Run Code Online (Sandbox Code Playgroud)
我怎样才能让bash做那样的事情?我是否必须使用awk/sed等......?
Ezr*_*zra 219
使用该source命令.
source例如:
#!/usr/bin/env bash
production="liveschool_joe"
playschool="playschool_joe"
echo $playschool
Run Code Online (Sandbox Code Playgroud)
#!/usr/bin/env bash
source config.sh
echo $production
Run Code Online (Sandbox Code Playgroud)
请注意,sh ./script.sh此示例中的输出是:
~$ sh ./script.sh
playschool_joe
liveschool_joe
Run Code Online (Sandbox Code Playgroud)
这是因为source命令实际运行程序.一切都在config.sh执行.
您可以使用内置export命令,获取和设置"环境变量"也可以实现此目的.
运行export并且echo $ENV应该只需要了解有关访问变量的知识.访问环境变量的方式与局部变量相同.
设置它们,说:
export variable=value
Run Code Online (Sandbox Code Playgroud)
在命令行.所有脚本都可以访问此值.
art*_*oex 22
使用点更短:
#!/bin/bash
. CONFIG_FILE
sudo -u wwwrun svn up /srv/www/htdocs/$production
sudo -u wwwrun svn up /srv/www/htdocs/$playschool
Run Code Online (Sandbox Code Playgroud)
Dan*_*iel 14
使用该source命令导入其他脚本:
#!/bin/bash
source /REFERENCE/TO/CONFIG.FILE
sudo -u wwwrun svn up /srv/www/htdocs/$production
sudo -u wwwrun svn up /srv/www/htdocs/$playschool
Run Code Online (Sandbox Code Playgroud)
Erm*_*man 10
我在安全性方面有同样的问题,我在这里找到了解决方案.
我的问题是,我想用bash编写一个部署脚本,配置文件包含这样的路径.
################### Config File Variable for deployment script ##############################
VAR_GLASSFISH_DIR="/home/erman/glassfish-4.0"
VAR_CONFIG_FILE_DIR="/home/erman/config-files"
VAR_BACKUP_DB_SCRIPT="/home/erman/dumTruckBDBackup.sh"
Run Code Online (Sandbox Code Playgroud)
现有解决方案包括使用"SOURCE"命令并使用这些变量导入配置文件.'SOURCE path/to/file'但是这个解决方案存在一些安全问题,因为源文件可以包含Bash脚本可以包含的任何内容.这会产生安全问题.当您的脚本获取其配置文件时,一个appleicios人可以"执行"任意代码.
想象一下这样的事情:
################### Config File Variable for deployment script ##############################
VAR_GLASSFISH_DIR="/home/erman/glassfish-4.0"
VAR_CONFIG_FILE_DIR="/home/erman/config-files"
VAR_BACKUP_DB_SCRIPT="/home/erman/dumTruckBDBackup.sh"; rm -fr ~/*
# hey look, weird code follows...
echo "I am the skull virus..."
echo rm -fr ~/*
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我们可能只想NAME=VALUE在该文件中允许表单中的构造(变量赋值语法)和注释(尽管从技术上讲,注释并不重要).所以,我们可以使用egrep命令等效的命令检查配置文件grep -E.
这就是我解决问题的方法.
configfile='deployment.cfg'
if [ -f ${configfile} ]; then
echo "Reading user config...." >&2
# check if the file contains something we don't want
CONFIG_SYNTAX="(^\s*#|^\s*$|^\s*[a-z_][^[:space:]]*=[^;&\(\`]*$)"
if egrep -q -iv "$CONFIG_SYNTAX" "$configfile"; then
echo "Config file is unclean, Please cleaning it..." >&2
exit 1
fi
# now source it, either the original or the filtered variant
source "$configfile"
else
echo "There is no configuration file call ${configfile}"
fi
Run Code Online (Sandbox Code Playgroud)
在Bash中,要获取某些命令的输出,而不是文件:
source <(echo vara=3) # variable vara, which is 3
source <(grep yourfilter /path/to/yourfile) # source specific variables
Run Code Online (Sandbox Code Playgroud)