我有一个要在docker容器中构建的环境设置脚本。它获取一个属性文件,该属性文件是键=值对,然后遍历并使用它们创建环境。我遇到的问题是,当我尝试对用户进行chown(从属性中提取值)时,它显示为“ user \ r”,这在chown上引发了错误。
这正在我准备的docker环境中执行-CentOS:7 base。从属性文件中提取用户ID,在容器中作为用户创建该用户ID,并授予对wheel组的访问权限(usermod -aG wheel $ user),因此它们在容器中具有权限。
我可以从这个特定的变量中删除回车符,但是很好奇我如何避免所有问题/我是怎么引起的,因为我感觉它可能会导致其他当前不可见的问题。
#!/bin/bash
dirname=$(dirname $0)
input_properties="input-properties"
...
while read -r line; do declare -x "$line"; done <${dirname}/${input_properties}
...
$SUDO mkdir -p $log
...
$SUDO chown -R $app_user: $log
其中$ app_user和$ log来自输入属性文件:
app_user=stackoverflow
log=/opt/program-root/logs
错误是
chown: invalid spec: 'stackoverflow\r:'
答案 0 :(得分:2)
您的文件具有Windows样式的行尾。最简单的解决方法:
dos2unix ./${input_properties}
答案 1 :(得分:1)
只需告诉read
命令\r
是输入字段分隔符
while IFS=$' \t\r\n' read -r line; do ...
这比使用翻译快得多,并且不会更改原始文件。