命令替换会中断命令替换



我将一个 shell 脚本的一部分提取到另一个 shell 脚本中,由于某种原因,在调用子脚本后,命令替换停止工作。 我无法想象这是下脚本中的内容,但我也看不出我做错了什么。

我是否这样做:

dirname "$0"                                      # works
echo "`dirname "$0"`"                             # works
echo "$(dirname "$0")"                            # works
cat <<< "`dirname "$0"`"                          # works
cat <<< "$(dirname "$0")"                         # works
"$(dirname "$0")"/setup_buildroot.sh "$BUILDROOT" # call the sub-script
dirname "$0"                                      # works
echo "`dirname "$0"`"                             # empty string
echo "$(dirname "$0")"                            # empty string
cat <<< "`dirname "$0"`"                          # crash
cat <<< "$(dirname "$0")"                         # crash

或者我做:

dirname "$0"                                      # works
echo "`dirname "$0"`"                             # works
echo "$(dirname "$0")"                            # works
cat <<< "`dirname "$0"`"                          # works
cat <<< "$(dirname "$0")"                         # works
"`dirname "$0"`"/setup_buildroot.sh "$BUILDROOT"  # call the sub-script
dirname "$0"                                      # works
echo "`dirname "$0"`"                             # empty string
echo "$(dirname "$0")"                            # empty string
cat <<< "`dirname "$0"`"                          # crash
cat <<< "$(dirname "$0")"                         # crash

目录名称似乎工作正常,但反引号和$()停止工作。 命令替换只返回一个空字符串。

编辑:删除所有双引号""

不起作用

EDIT2:调用子脚本时显式执行 bash 不起作用

EDIT3:将"$(dirname "$0")"保存到变量并使用它不起作用

EDIT4:在子脚本中添加相同的echo命令表明子脚本中一切正常

编辑5:根据请求,输出脚本

/home/jayen/rep
/home/jayen/rep
/home/jayen/rep
/home/jayen/rep
/home/jayen/rep
#setup_buildroot.sh output here
/home/jayen/rep

bash: syntax error near unexpected token `newline'
bash: syntax error near unexpected token `newline'

我觉得调用子脚本正在破坏现有 bash 脚本会话的环境变量。也许尝试在下脚本行前面加上 bash ,所以

bash "`dirname "$0"`"/setup_buildroot.sh "$BUILDROOT"

看看是否可以解决问题。这是一个奇怪的情况。

我推荐的另一个解决方案是在第一行,做

mydir="$0"

并将所有$0替换为$mydir

更好的是,做

mydir=`dirname "$0"`

预先运行,而不是一遍又一遍地重新运行命令。

没有意义,但请尝试采购您的子脚本

. "$(dirname "$0")"/setup_buildroot.sh "$BUILDROOT" # call the sub-script

相关内容

  • 没有找到相关文章

最新更新