使用外部文件中的变量控制bash脚本

Modified on: Wed, 18 Sep 2019 01:40:02 +0800

我想像这样控制一个bash脚本:

#!/bin/sh USER1=_parsefromfile_ HOST1=_parsefromfile_ PW1=_parsefromfile_ USER2=_parsefromfile_ HOST2=_parsefromfile_ PW2=_parsefromfile_ imapsync \ --buffersize 8192000 --nosyncacls --subscribe --syncinternaldates --IgnoreSizeErrors \ --host1 $HOST1 --user1 $USER1 --password1 $PW1 --ssl1 --port1 993 --noauthmd5 \ --host2 $HOST2 --user2 $USER2 --password2 $PW2 --ssl2 --port2 993 --noauthmd5 --allowsizemismatch

使用来自控制文件的参数,如下所示:

#!/bin/sh
USER1=_parsefromfile_
HOST1=_parsefromfile_
PW1=_parsefromfile_
USER2=_parsefromfile_
HOST2=_parsefromfile_
PW2=_parsefromfile_

imapsync \
--buffersize 8192000 --nosyncacls --subscribe --syncinternaldates --IgnoreSizeErrors \
--host1 $HOST1 --user1 $USER1 --password1 $PW1 --ssl1 --port1 993 --noauthmd5 \
--host2 $HOST2 --user2 $USER2 --password2 $PW2 --ssl2 --port2 993 --noauthmd5 --allowsizemismatch

其中每一行代表脚本的一次运行,其中参数被提取并变为变量。

这样做最优雅的方式是什么?

PAT

最佳答案

使用shell脚本,这通常使用source函数来完成,该函数将文件作为shell脚本执行,就好像它被内联到您正在运行的脚本中一样 - 这意味着任何变量您在文件中设置的内容将导出到您的脚本中。

缺点是(a)您的配置文件已执行,因此如果没有特权的用户可以编辑特权配置文件,则存在安全风险。 (b)您的配置文件语法仅限于有效的bash语法。不过,它真的很方便。

config.conf 强>

USER=joe PASS=hello SERVER=127.0.0.2

script.sh 强>

#!/bin/bash # Set defaults USER=`whoami` # Load config values source config.conf foobar2000 --user=$USER --pass=$PASS --HOST=$HOST

source可以用一个. - 所以以下两个是等价的:

USER=joe
PASS=hello
SERVER=127.0.0.2
作者:tylerl

相关问答

添加新评论