【问题标题】:Why can't I execute a shell script using . ./test.sh?为什么我不能使用 . ./test.sh?
【发布时间】:2017-02-17 03:59:40
【问题描述】:

我有一个简单的 shell 脚本:

#!/bin/bash
echo test

我可以成功执行脚本:

./test.sh

source ./test.sh

但是,以下会引发错误:

. ./test.sh

错误:

.: Command not found.

什么可能导致错误?这适用于 el capitan(这是升级版),但不适用于 sierra。在过去的几个主要版本中,终端或默认 shell 是否发生了变化?

我正在使用默认终端运行 macOS 10.12.3 - 这是全新安装而不是升级(升级挂在以前的 shell 设置上)。

【问题讨论】:

  • 你能像. test.sh, POSIX 来源推荐的那样试试吗。 pubs.opengroup.org/onlinepubs/9699919799/utilities/…
  • 我仍然得到 .: command not found
  • @Inian: POSIX 说“如果文件不包含 ,shell 将使用 PATH 指定的搜索路径来查找包含文件的目录。”,这意味着你 必须 使用路径前缀./ 来获取当前 目录中的文件。 . test.sh 不应该查看当前目录,(bash 可以,但 dashkshzsh 不应该,符合 POSIX)。
  • @mklement0:公平点,适当指出!
  • . file 不执行 file,它在调用它的同一 shell 进程中运行来自 file 的命令(假设它是支持 . 的 shell)(它应该主要用于在 shell 中操作变量)

标签: bash shell terminal


【解决方案1】:

听起来您已将默认 shell 切换为 bash 以外的其他内容,可能是 csh,其中 (a) . 不是内置命令(仅 @987654324 @ 是)和(b)即使是,您也无法将 Bash 代码加载到当前会话中。

要检查您的默认 shell,请运行 echo $SHELL

运行chsh -s /bin/bash 以切换回bash 作为您的默认shell。

【讨论】:

  • 输出现在读取 /bin/bash 。因此,我的公司用来设置新 Macbook 的脚本之一似乎更改了默认 shell - 非常感谢您的帮助。我会接受你的回答。
猜你喜欢
  • 2016-09-18
  • 2020-02-18
  • 2010-10-28
  • 2010-10-28
  • 2011-03-26
  • 2022-01-03
  • 2012-07-16
  • 2012-03-13
  • 2022-01-04
相关资源
最近更新 更多