【发布时间】:2019-09-16 02:57:12
【问题描述】:
我有一个在 docker 容器中构建的环境设置脚本。它需要一个键=值对的属性文件,然后通过并使用它们来创建一个环境。我遇到的问题是当我尝试 chown 用户(从属性中提取的值)时,它以“user\r”的形式出现,这会在 chown 上引发错误。
这是在我准备好的 docker 环境中执行的 - CentOS:7 base。从属性文件中提取用户 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:'
【问题讨论】:
-
您读取的文件可能有回车。检查
file filename(“使用 CRLF 行终止符”);用dos2unix filename修复。 -
是的,你是对的。我在vi中跳入文件并修复了ff。不知道为什么我以前发生这种情况时没有想到这一点。谢谢。