意外的来源(错误)行为

意外的来源(错误)行为

我有一个文件,其 Raspberry Pi 地址名为pi.它在我的主目录中。

pi=192.168.0.173

要连接到 Pi,我会在我的主目录中执行以下操作:

. pi && ssh pi@$pi

有效。然后我用我的以下脚本改进了它~/bin

#!/bin/bash
. ~/pi
ssh pi@$pi

现在我只是这样做:

pi

当然有效。但我有时需要 Pi IP。然后我在我的主目录中执行此操作:

. pi

但我不是获取文件,而是连接到我的 Pi。为了让事情变得更奇怪,

$ . pi && echo ok
pi@raspberrypi:~ $ logout
Connection to 192.168.0.173 closed.
ok

zsh我在所有和dash中都得到相同的行为sh。有人可以解释一下吗?

答案1

man知道这一切...摘自 Bash 的。

源文件名[参数]
      在当前 shell 中读取并执行 filename 中的命令
      环境并返回最后一个命令exe的退出状态
      从文件名中删除。  如果文件名不包含斜杠,
      PATH 中的文件名用于查找包含以下内容的目录
      文件名。  在 PATH 中搜索的文件不必是可执行的。
      当bash不是posix模式时,当前目录是
      如果 PATH 中没有找到文件,则进行搜索。  如果源路径选项
      shopt 内置命令已关闭,路径不是
      搜索过。如果提供任何参数,它们将成为正值
      执行 filename 时的参数。否则
      位置参数不变。返回状态是
      脚本中最后一个命令退出的状态(如果没有则为 0)
      命令被执行),如果未找到文件名或则返回 false
      无法读取。

相关内容