Bash 不同外壳中的不同环境

Bash 不同外壳中的不同环境,bash,zsh,Bash,Zsh,为了简单起见,假设我正在使用bash和zsh。在bash中,我有一个.bash\u配置文件将~/bash/bin放在路径中,在zsh中,我的.zshrc中有路径~/zsh/bin。现在,假设我在~/bash/bin/foobar和~/zsh/bin/foobar有两个可执行文件。同样地,如果我运行命令-vfoobar,我应该返回这两个命令中的一个,这取决于我是在bash还是在zsh中工作。我的问题如下:在bash脚本中,是否可以确定zsh中会输出什么command-vfoobar,反之亦然 我对

为了简单起见,假设我正在使用bash和zsh。在bash中,我有一个
.bash\u配置文件
~/bash/bin
放在路径中,在zsh中,我的
.zshrc
中有路径~/zsh/bin。现在,假设我在
~/bash/bin/foobar
~/zsh/bin/foobar
有两个可执行文件。同样地,如果我运行
命令-vfoobar
,我应该返回这两个命令中的一个,这取决于我是在bash还是在zsh中工作。我的问题如下:在bash脚本中,是否可以确定zsh中会输出什么
command-vfoobar
,反之亦然

我对此没有信心

#!/bin/bash
zsh -c 'command -v foobar'
在这种情况下,将给我
~/zsh/bin/foobar
的输出。

命令

zsh -c 'command -v foobar'
不处理~/.zshrc,因此您不能期望此文件对此命令有任何影响。你可以做一个

zsh -i -c 'command -v foobar'
强制处理.zshrc,但这并不一定意味着您会在这里看到不同的目录。例如,假设在bash中,路径设置为
/usr/bin:$HOME/bash/bin
,而.zshrc通过执行

PATH=$PATH:$HOME/zsh/bin

在这种情况下,即使是
zsh-i-c….
也会显示$HOME/bash/bin/foobar作为匹配项。

为什么不呢?您具体设想了哪些失败场景?我对Zsh还不太熟悉,不能说它在没有修改的情况下是否有效;对于Bash,交互shell与非交互shell以及登录shell与非登录shell的结果可能不同,因此,如果需要,请确保使用正确的标志调用它,例如交互式非登录shell行为,即使您是从非交互式和/或登录shell查询它。我发现
bash/bin
zsh/bin
之间的分离很奇怪。谁在乎
bin
中的命令是用什么语言编写的?@KelvinChung:它的输出将与bash中的相同。由于使用了
zsh-c
,因此zsh只是从bash继承
PATH
变量。要真正看到任何差异,您必须在bash中清空您的环境,然后执行,比如,
zsh-l-i-c“…”