在 FreeBSD 9.3 上找不到点命令 (.)

dot command (.) not found on FreeBSD 9.3

FreeBSD 9.3 上,我尝试在 root 用户 (root@myserver#) 上使用点命令 (.),但收到以下错误:

> .: Command not found.

但是,作为“非 root”(#) 用户,它工作正常!这是怎么回事?

$PATH - 我指向 /root,现在,我在 ec2 freebsd 9.3 上测试点命令 (.) 是有效的,但在 virsualbox 上找不到构建服务器目标

我使用 'su username_root_login' 解决了问题,点命令 (.) 工作得很好。

. ("dot") 命令内置于 Bourne shell (sh) 和派生自它的 shell 中 (bashkshzsh 等)。它从指定文件读取并执行命令。与将文件作为脚本执行不同,. 在当前 shell 进程的上下文中执行命令。在某些 shell 中,source 等同于 ..

csh 及其衍生物 tcsh do not 具有 . 作为内置命令。他们确实有一个等效的 source 命令——但这不太可能是解决方案,因为 . filenamesource filename 在当前 shell 中执行命令 process,命令必须对当前 shell 有效。 shcsh 对于一些简单的命令是相似的,但对于任何复杂的东西(if 语句、循环、某些类型的 I/O 重定向等)它们实现了不兼容的语言。如果您有一个脚本要使用 . filenameshbash 执行,您将无法从 cshtcsh 执行,即使通过使用 source filename.

您收到错误消息的原因可能是 root 帐户的默认 shell 是 /bin/csh/bin/tcsh(我认为这是基于 BSD 的系统的典型情况)。您自己的非 root 帐户可能默认使用一些基于 Bourne 的 shell。您可以通过在提示符下键入 echo $SHELL 来了解您的默认值 shell。

在我的系统上,当我尝试从 cshtcsh 提示符下使用 . filename 时收到不同的错误消息,但您可能有一个行为不同的版本。

这就解释了为什么会出现错误。它没有告诉您如何修复它,但您还没有真正为我们提供足够的信息。如果您确实需要源文件,则必须 运行 与该文件中的命令兼容的 shell。例如,您可能需要从根 shell 提示符下执行 /bin/bash,然后使用 . 命令。但是没有更多信息,我不知道这是否有意义。

您要获取什么脚本?它应该做什么?您确定它需要采购而不是执行吗?