使用点命令调用包含点命令调用语句的Shell脚本出错 10C

详细描述一下:
我有一个Shell脚本,假设名为a.sh ,里面包含用点命令调用的语句,例如:
. XXX.sh
重点是因 调用a.sh脚本的方式不同,结果也不同:
如果使用 点命令 a.sh 这个就能正常运行。
但如果使用 ./a.sh 就会报错,错误为:/bin/sh: 5: export: -march: bad variable name
==========分割线================================
具体情况是,a.sh脚本内容如下:
. $SVP_SYSTEM_SDK_PATH/environment-setup-cortexa7hf-neon-vfpv4-poky-linux-gnueabi

 if [ -e "$SVP_SYSTEM_SDK_PATH/sysroots/x86_64-oesdk-linux/environment-setup.d/qt5.sh" ]; then
     . $SVP_SYSTEM_SDK_PATH/sysroots/x86_64-oesdk-linux/environment-setup.d/qt5.sh
 fi

我在调用a.sh脚本时,如果使用 ./a.sh 就会报错,如果使用 . a.sh 就能正常运行。
我知道点命令等同于source命令,都是不创建新的shell,只在调用命令所在的shell中运行。但为何会出现这种情况?

1个回答

看上去是shell的兼容性问题

   . a.sh

是用用户当前所在shell来执行 a.sh脚本, 不管 a.sh头部指定的是什么

 ./a.sh 

可能会采用 #!/bin/someshell 中指定

可以用以下脚本试验一下两次输出的差异

 #!/bin/zsh

if test -n "$ZSH_VERSION"; then
  PROFILE_SHELL=zsh
elif test -n "$BASH_VERSION"; then
  PROFILE_SHELL=bash
elif test -n "$KSH_VERSION"; then
  PROFILE_SHELL=ksh
elif test -n "$FCEDIT"; then
  PROFILE_SHELL=ksh
elif test -n "$PS3"; then
  PROFILE_SHELL=unknown
else
  PROFILE_SHELL=sh
fi

echo profile_shell $PROFILE_SHELL
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐