在bash脚本中包含文件

在bash脚本中包含文件,bash,sh,Bash,Sh,我从unifi文档中复制了一个脚本 #!/bin/sh ## define required variables username=admin password=admin baseurl=https://localhost:8443 ## include the API library . unifi_sh_api unifi_login # unifi_authorize_guest <mac> <minutes> [up=kbps] [down=kbps] [

我从unifi文档中复制了一个脚本

#!/bin/sh

## define required variables
username=admin
password=admin
baseurl=https://localhost:8443

## include the API library
. unifi_sh_api

unifi_login
# unifi_authorize_guest <mac> <minutes> [up=kbps] [down=kbps] [bytes=MB]
unifi_authorize_guest $1 $2
unifi_logout
这是我尝试执行文件时得到的结果。这是什么原因造成的?文件显然位于正确的文件夹中

foo@site:/home/foo# sh unifi.sh
unifi.sh: 9: .: unifi_sh_api: not found

您正在调用
bash
作为
/bin/sh
,这将
bash
置于
sh
-兼容模式。报告说:

如果文件不包含斜杠,外壳应使用path指定的搜索路径查找包含文件的目录

这意味着除非当前目录是
$PATH
的一部分,否则不会搜索该目录:

$ /bin/sh -c '. test.sh'
/bin/sh: 1: .: t.sh: not found

$ /bin/sh -c 'PATH=".:$PATH"; . test.sh'
$
然而,
bash
似乎在搜索当前目录:

$ /bin/bash -c '. test.sh'
$

如果使用
source
而不是
,该怎么办?添加当前目录。在路径中输入并导出它。然后执行就可以了。@fedorqui我以为“source”只是dot(“.”)的别名,所以我不明白你为什么建议交换它们。“如果你有时间的话,请你告诉我好吗?”MarkSetchell说实话,我相信他们是一样的,但我看到了这条线索:并认为在某些情况下,他们可能会有不同的行为。不过,我很确定这不是答案。@fedorqui好的,谢谢。
$ /bin/bash -c '. test.sh'
$