我在名为reach.sh
的文件中有一个bash脚本。
使用chmod 755 /Users/vb/Documents/util/bash/reach.sh
授予此文件exe权限。
然后我使用alias reach='/Users/vb/Documents/util/bash/reach.sh'
到目前为止,效果很好。
碰巧我需要在当前进程中运行此脚本,因此从理论上讲,我需要在脚本路径之前添加.
或source
。
所以我现在有alias reach='source /Users/vb/Documents/util/bash/reach.sh'
这时,当我运行别名reach
时,脚本失败。
错误 /Users/vb/Documents/util/bash/reach.sh:7: = not found
第7行 if [ "$1" == "cr" ] || [ "$1" == "c" ]; then
完整脚本
#!/bin/bash
# env
REACH_ROOT="/Users/vb/Documents/bitbucket/fork/self"
# process
if [ "$1" == "cr" ] || [ "$1" == "c" ]; then
echo -e "Redirection to subfolder"
cd ${REACH_ROOT}/src/cr
pwd
else
echo -e "Redirection to root folder"
cd ${REACH_ROOT}
pwd
fi
知道我可能会错过什么吗?
答案 0 :(得分:0)
我正在zsh
而不是bash
shell中运行脚本,因此当我强制其在当前进程中运行时,它在zsh
shell中运行,而没有不再识别bash
命令。
答案 1 :(得分:0)
在您的问题中,您说“碰巧我需要在当前进程中运行此脚本”,所以我想知道为什么您完全使用source
。只需运行脚本。观察:
bash-script.sh
#!/bin/bash
if [ "$1" == "aaa" ]; then
echo "AAA"
fi
zsh-script.sh
#!/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 来解释这些行本身。这将完全解决bash
上下文中zsh
语法的使用。