慕长生 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 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。