慕长生 2017-11-22 11:18 采纳率: 0%
浏览 1389
已结题

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

详细描述一下:
我有一个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条回答 默认 最新

  • COCO_AS 2017-11-22 14:57
    关注

    看上去是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
    
    评论

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧