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:不是这样。您可以使用[
命令,但您需要正确拼写比较运算符。相等的拼写是=
,而不是=
。