繁体   English   中英

使用循环在bash脚本中读取文件

[英]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 $AUTOSTARTfor NAME in $AUTOSTART工作方式是使用环境变量$IFS作为分隔符(默认值为空格,制表符和换行符)将$AUTOSTART拆分为单词。 然后将每个单词依次存储在$NAME并在循环内进行处理,直到没有剩余单词为止。

那么,解决问题的方法是使用空格(或制表符或换行符)分隔单词:

AUTOSTART="default another"

双引号是必需的,否则它将被阅读为两个单独的命令: AUTOSTART=defaultanother (同样由于使用IFS进行单词拆分)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM