Shell“source”命令在导入文件的第一行始终显示“未找到命令

k4aesqcs  于 2023-03-09  发布在  Shell
关注(0)|答案(2)|浏览(178)

这是可行的,但有点奇怪。我有一个shell脚本读取配置文件。
主脚本:

#!/usr/bin/env bash

BASE="`dirname $0`"
BASE="`cd ${BASE} && pwd`"
CONFIG="${BASE}/sync.config"
source $CONFIG

echo "$SERVER_HOSTNAME"

配置(同步配置)

SERVER_HOSTNAME="test-1"
SERVER_DOCROOT="/opt/dir/dir/"

当我这样做时,我注意到在运行脚本时会收到以下警告。
/同步配置:第1行:服务器主机名=测试-1:未找到命令
第一个变量是空的,但是第二个变量很好。为了好玩,我在第一行添加了一个垃圾注解:

#blah
SERVER_HOSTNAME="test-1"
SERVER_DOCROOT="/opt/dir/dir/"

同样的事情发生在第一行,这一次,两个变量对脚本都是可用的,它运行得很好,只是抱怨了第一行。
sync.config:第1行:#布拉语:未找到命令
总是第一行。文件的其他部分都很好。为什么?

s8vozzvw

s8vozzvw1#

您可能在sync.config的开头有一个不可见字符。请尝试:

$ head -n1 sync.config | hd

例如,您可能会看到:

00000000  ef bb bf 23 62 6c 61 68  0a                       |...#blah.|
00000009

这表示文件以UTF-8 BOM(字节顺序标记)开头。

pvabu6sv

pvabu6sv2#

有一个函数覆盖源代码。这是我如何解决这个问题:
unset -f source $CONFIG

相关问题