[英]Read file in bash script with loop
给定文件socat.conf
AUTOSTART=default
SOCAT_default="TCP4-LISTEN:3724,nodelay,fork,reuseaddr,su=nobody TCP4:your.wow.server.ip.address:3724,nodelay"
bash脚本的相关部分读取了该文件:
[ ! -f /etc/default/socat.conf ] || . /etc/default/socat.conf
start () {
echo "Starting $DESC:"
maxfds
umask 027
cd /tmp
if test "x$AUTOSTART" = "xnone" -o -z "x$AUTOSTART" ; then
echo "Autostart disabled."
exit 0
fi
for NAME in $AUTOSTART ; do
ARGS=`eval echo \\\$SOCAT_$NAME`
echo $ARGS
start_socat
echo " $NAME $ARGS"
done
return $?
}
有关完整文件,请参见此处: https : //blog.bentrax.de/2009/08/26/socat-start-automatisieren-und-iptables-regeln-laden/
我的问题是,如何向socat.conf添加另一个命令? 我尝试过
AUTOSTART=default,another
SOCAT_default="TCP4-LISTEN:3724,nodelay,fork,reuseaddr,su=nobody TCP4:your.wow.server.ip.address:3724,nodelay"
SOCAT_another="..."
但是,这没有用。 我对bash脚本不太了解,无法理解$ AUTOSTART循环中的NAME。 我认为答案就在那里。 有任何想法吗?
for NAME in $AUTOSTART
的for NAME in $AUTOSTART
工作方式是使用环境变量$IFS
作为分隔符(默认值为空格,制表符和换行符)将$AUTOSTART
拆分为单词。 然后将每个单词依次存储在$NAME
并在循环内进行处理,直到没有剩余单词为止。
那么,解决问题的方法是使用空格(或制表符或换行符)分隔单词:
AUTOSTART="default another"
双引号是必需的,否则它将被阅读为两个单独的命令: AUTOSTART=default
和another
(同样由于使用IFS进行单词拆分)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.