在bash脚本中包含文件
我从unifi文档中复制了一个脚本在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] [
#!/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'
$