![意外的来源(错误)行为](https://linux22.com/image/105613/%E6%84%8F%E5%A4%96%E7%9A%84%E6%9D%A5%E6%BA%90%EF%BC%88%E9%94%99%E8%AF%AF%EF%BC%89%E8%A1%8C%E4%B8%BA.png)
我有一个文件,其 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 无法读取。