Shell"source"命令始终在导入文件的第一行上显示"command not found"

Aar*_*ryn 1 bash shell

所以这很有效,但很奇怪.我有一个shell脚本读取配置文件.他们来了:

主脚本:

#!/usr/bin/env bash

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

echo "$SERVER_HOSTNAME"
Run Code Online (Sandbox Code Playgroud)

配置(sync.config)

SERVER_HOSTNAME="test-1"
SERVER_DOCROOT="/opt/dir/dir/"
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我注意到在运行脚本时会收到以下警告.

/sync.config:line 1:SERVER_HOSTNAME = test-1:找不到命令

第一个变量是空的,但第二个变量很好.为了好玩,我在第一行添加了垃圾评论:

#blah
SERVER_HOSTNAME="test-1"
SERVER_DOCROOT="/opt/dir/dir/"
Run Code Online (Sandbox Code Playgroud)

同样的事情发生在第1行.而这一次,脚本都可以使用这两个变量并运行良好.它只是抱怨第一行.

sync.config:第1行:找不到#blah:命令

永远是第一线.其余的文件都没问题.为什么?

ric*_*ici 5

你可能在一开始就有一个看不见的角色sync.config.尝试:

 $ head -n1 sync.config | hd 
Run Code Online (Sandbox Code Playgroud)

例如,您可能会看到:

00000000  ef bb bf 23 62 6c 61 68  0a                       |...#blah.|
00000009
Run Code Online (Sandbox Code Playgroud)

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