Bash 使用源代码时未找到脚本文件

Bash 使用源代码时未找到脚本文件,bash,Bash,我在一个名为reach.sh的文件中有一个bash脚本 使用chmod 755/Users/vb/Documents/util/bash/reach.sh为该文件授予exe权限 然后,我使用alias-reach='/Users/vb/Documents/util/bash/reach.sh' 到目前为止,这个效果很好 碰巧我需要在当前进程中运行此脚本,因此理论上我需要在脚本路径之前添加或源代码 现在我有了alias reach='source/Users/vb/Documents/util/b

我在一个名为
reach.sh
的文件中有一个bash脚本

使用
chmod 755/Users/vb/Documents/util/bash/reach.sh
为该文件授予exe权限

然后,我使用
alias-reach='/Users/vb/Documents/util/bash/reach.sh'

到目前为止,这个效果很好

碰巧我需要在当前进程中运行此脚本,因此理论上我需要在脚本路径之前添加
源代码

现在我有了
alias reach='source/Users/vb/Documents/util/bash/reach.sh'

此时,当我运行别名
reach
时,脚本失败

错误
/Users/vb/Documents/util/bash/reach.sh:7:=未找到

第7行<代码>如果[“$1”==“cr”]| |[“$1”==“c”];然后

全文


你知道我会错过什么吗

我在
zsh
中运行脚本,它不是
bash
shell,因此当我强制它在当前进程中运行时,它在
zsh
shell中运行,不再识别
bash
命令

在你的问题中,你说“碰巧我需要在我当前的进程中运行这个脚本”,所以我想知道你为什么要使用
source
。只需运行脚本。注意:

bash script.sh

#!/bin/bash

if [ "$1" == "aaa" ]; then
    echo "AAA"
fi
#!/bin/zsh

echo "try a ..."
./bash-script.sh a
echo "try aaa ..."
./bash-script.sh aaa
echo "try b ..."
./bash-script.sh b
zsh script.sh

#!/bin/bash

if [ "$1" == "aaa" ]; then
    echo "AAA"
fi
#!/bin/zsh

echo "try a ..."
./bash-script.sh a
echo "try aaa ..."
./bash-script.sh aaa
echo "try b ..."
./bash-script.sh b
来自
/zsh script.sh的输出

try a ...
try aaa ...
AAA
try b ...
如果在
zsh script.sh
中,我将
source
放在每个
/bash script.sh
的前面,我确实得到了您在问题中描述的行为

但是,如果您只需要“在我当前的进程中运行此脚本”,那么。。。只要运行它


source
尝试将文件读取为要由当前shell解释的行,正如您所说的
zsh
。但只要运行它,就会导致第一行(即
#!/bin/bash
“shebang”行)启动一个新的shell来解释这些行本身。这将从
zsh
上下文中完全解决
bash
语法的使用问题。

似乎仍然可以找到脚本,但在脚本内部(如
:16
所示的第16行)存在错误。你能给我们看看你的剧本吗?同时删除
cmd
标记
bash
不是
cmd
。也就是说,我不能使用任何shell复制您的错误。如果将
==
替换为
=
,会发生什么情况?“碰巧我需要在当前进程中运行此脚本”-您当前的进程是什么?它是bash shell还是其他东西?
==
是bash扩展,如果需要在另一个shell中运行脚本,则不应使用它。如果要检查脚本在shell之间的可移植性,请将shebang更改为
/bin/sh
,然后将其粘贴到shellcheck.net中。它警告
=
脚本失败与Bash/ZSH无关,这是由于不正确使用
if
条件造成的。您不能使用
[
环境进行字符串比较。请尝试放置
[[
,这样应该会起作用。
如果[[“$1”==“cr”]]|[[“$1”==“c”]];那么
单个
[
仅当您使用
-eq
样式与数字等进行比较时才有效。这种情况发生在Mac版本的BSD Bash上,而不发生在Ubuntu和其他企业Linux系统使用的AT&T版本的Bash上。@praveen:不是这样。您可以使用
[
命令,但您需要正确拼写比较运算符。相等的拼写是
=
,而不是
=