使用点命令调用包含点命令调用语句的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问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java调用Linux 命令、Shell脚本
最近遇到了一个需求:在JAVA文件中调用一个Linux Shell文件 当时第一印象是:这个还可以调用shell脚本? 网上查询后得到了答案:Java 中的Process类实现此功能,具体实现如下: String command="/file.sh"; Process process =null; process = Runtime.getRuntime().exec(command); t
source命令与“.”点命令.doc
source命令与“.”点命令 介绍
linux 点命令
在公司的代码里看到这么一句代码,第一次见到这点命令,百思不得其解,这是干啥的????(黑人问号脸)#引入配置文件 . ./property.confgoogle后才直到,原来点命令是source命令的简写。。看下维基百科的定义吧: source是一个Shell内置命令,用以在当前上下文中执行某文件中的一组命令。[1] “当前的上下文”一般指的是在交互式会话中,用户当前敲入命令的那个终端。s
命令对象调用存储过程出错
代码:rn---------------------------------------rn rnSqlConnection nwindConn = new SqlConnection("Data Source=COMPUTER_SONG;Integrated Security=SSPI;" + "Initial Catalog=Northwind");rn nwindConn.Open();rn //string insertStr = "INSERT INTO cUSTOMERS (CustomerID,CompanyName) Values (@CustomerID,@CompanyName)";rn string insertStr = "proInsertCustomers";rn SqlCommand insertCMD = new SqlCommand(insertStr, nwindConn);rnrn SqlParameter prm1 = new SqlParameter("@CustomerID", SqlDbType.NChar, 5);rn prm1.Direction = ParameterDirection.Input;rn SqlParameter prm2 = new SqlParameter("@CompanyName", SqlDbType.NVarChar, 40);rn prm2.Direction = ParameterDirection.Input;rn insertCMD.Parameters.Add(prm1);rn insertCMD.Parameters.Add(prm2);rn prm1.Value = TextBox1.Text;rn prm2.Value = TextBox2.Text;rnrn Int32 recordsAffected = insertCMD.ExecuteNonQuery();rn Response.Write(recordsAffected.ToString() + "条记录插入");rn-----------------------------------------rn存储过程rnCREATE proc proInsertCustomersrn@CustomerID nchar(5),@CompanyName nvarchar(40)rnas rnInsert into Customers (CustomerID,CompanyName)Values(@CustomerID,@CompanyName)rnGOrn-----------------------------------------rn出错:rn异常详细信息: System.Data.SqlClient.SqlException: 第 1 行: 'proInsertCustomers' 附近有语法错误。rnrn源错误: rnrnrn行 32: prm2.Value = TextBox2.Text;rn行 33: rn行 34: Int32 recordsAffected = insertCMD.ExecuteNonQuery();rn行 35: Response.Write(recordsAffected.ToString() + "条记录插入");rn行 36: rn rnrn源文件: d:\WebSite2\Default4.aspx.cs 行: 34 rn
SQLite 点命令简介
SQLite进入命令行: # sqlite3 SQLite version 3.7.14.1 2012-10-04 19:37:12 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite>  在sqlite>提示符后面就可以使用sqlite命令了,注意:提示符与点命令之间不能有空格
在shell脚本中如何调用hadoop 命令
我们在shell脚本中可能会用到hadoop或者其他命令,而这些命令可能是一个整体,如果我们只是简单的写入到shell脚本中,可能会被分解成其他的各个子字段,即有可能会分成两部分去执行,这样就会导致命令执行失败。 hadoop fs -get /XXXXXX 上面这个就会分成hadoop fs 和get两部分这样就执行不成功了 所以在shell脚本中应该用反引号“括起来,注意这个事反引号不
java调用shell脚本执行impdp命令
直接进入linux执行脚本语句 直接进入linux执行脚本语句 1.登录 linux oracle su - oracle -c 2. 进入目录 /home/app/oracle/product/11.2.0/db_1/bin/ bin路径 执行 su -oracle -c "/home/app/oracle/product/11.2.0/db_1...
Qt下编码调用Linux的Shell脚本命令
引言 Linux下编写Qt程序,常会碰到需要执行Shell脚本命令的时候。因为简单调用的一个脚本命令,可以大大简化功能实现的复杂度。 调用Shell脚本命令,Qt环境下常用两种方式: 1)使用QProcess开启一个进程,把脚本命令作为参数传递进去。 2)使用Linux系统函数。 不推荐使用系统函数,一是复杂度比较高;二是常常会阻塞进程;三是控制和数据交互不方便。所以本文一下内容都是讲述使用QPr...
混合开发调用篇--如何用Python调用shell脚本和命令
在项目开发中,不免会有语言调用的问题,今天来讲一下如何利用python来调用shell脚本和命令 我们来建立一个test.sh文件 #!/bin/sh echo "hello" NUM=$1 #exchange number of NUM with Python NUM1=`expr $NUM1 / $NUM` NUM2=`expr $NUM2 \* $NUM` #这个乘号前面需要...
shell脚本:使用if-then语句和test命令
一、基本结构化命令if-then语句格式:if command then command fibash shell的if语句会运行if后面的那个命令。如果该命令的退出状态码是0(该命令成功运行),位于then部分的命令就会被执行。如果该命令的退出状态码是其他值,then部分的命令就不会被执行。 fi语句用来表示if-then语句到此结束。#! /bin/bash if pwd then
调用WinIO32.dll时出错:找不到入口点.
模块:rn[code=VB]rnPublic Declare Function InitializeWinIo32 Lib "WinIo32.dll" () As Booleanrn[/code]rnrnForm:rn[code=VB]rnPrivate Sub Command1_Click()rnIf InitializeWinIo32 = False Thenrn MsgBox "Whoops ! There is a problem with InitializeWinIo.", vbOKOnly + vbCritical, "VBDumpPort32"rnEnd IfrnEnd Subrn[/code]rnrn点击button后就弹出:rn找不到DLL入口点InitializeWinIo32 in winio32.dll.rnWinIo32.dll和WinIo32.sys都放在当前目录下的. 请问是什么原因呢?
cmd - 使用curl命令的注意点
前言 最近在cmd中使用curl命令来测试rest api,发现有不少问题,这里记录一下。 在cmd中使用curl命令的注意事项 json不能由单引号包括起来 json数据里的双引号要用反斜杠\转义 json数据里不能带有空格 如果想要在json数据里使用空格则必须用双引号将整个json数据包括起来 Content-type要由双引号包括起来 比如下边的例子就是正确的格式: curl -X P...
使用命令快速调用服务
远程连接 mstsc (连接时,可以直接打远程机器的名字,比如server001 ,并且还可以带上用户名 server001\user001) 开机启动项 msconfig 服务 services.msc 计算器 calc 画图 mspaint 记事本 notepad 
使用Linux文本替换命令时的注意点
将文本查看命令 cat 和替换命令 tr 结合起来,可以将文本替换后的内容显示出来。 例如文件 Hello.c 的内容为: include<stdio.h> int main() { printf("Hello World !"); return 0; } //This is a
AOP调用注意点
package com.agp.aop.impl; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; //CBuyCar接口的实现类Customer @Compone
Git 命令值得注意的几个点
大多数人对 Git 的常用命令都有一定的了解,这里罗列一些具体案例说明需要使用哪些命令。 graph LR; Remote – pull – > Repository graph LR;   A–>B;   A–>C;   B–>D;   C–>D; 从网上clo
windows sc命令注意点
在windows xp系统下使用sc命令时,需要注意格式,等号后要有1个空格,如: sc config alert DisplayName= test 如果在DisplayName=后面没有空格,会认为命令行错误。
ethtool 命令输出的注意点
ethtool 命令输出的注意点
eclipse 扩展点与命令等
org.eclipse.ui.***.jar 中plugin.xml定义了多数的扩展点,如常用command。 eclipse自定义的command可转化为IWorkbenchAction,如org.eclipse.ui.file.export命令可以转为ActionFactory.EXPORT.create(window)。  ...
shell脚本:命令
命令连接符 ;表示不管前面是否执行成功都要执行 &&表示前面执行成功才执行后面 ||表示前面执行失败才执行后面 read命令 read [选项] 值 read -p(提示语句) -n(字符个数) -t(时间秒) -s(不显示) 运算符 expr 3 + 2 结果赋值 sum=`expr 3 + 2` 或者 sum=$((3 + 2)) 乘法 expr 3 \...
shell脚本命令
cat getAllData.do\?deviceName\=aqua\&version\=8.3.12\&manifest\=a | tr ";" "\n"  显示时替换字符';'为换行符 sudo sed "s/;/\n/g" test.txt 显示test.txt文件中所有分号替换成换行,但是文件本身不生效 sudo sed -i "s/;/\n/g" te...
shell脚本【命令1】test命令
     ⑴ 首先讲讲介绍它的必要性:     在任何一种编程语言中,条件测试功能都是必不可少的。条件测试可以控制程序的控制流向和下一步的处理动作。是控制程序逻辑流向一个非常重要的方式。   而test条件测试语句,以其丰富的条件判断功能,0或1的出口返回状态,使其非常适合应用于条件测试语句。     ⑵ test命令的作用对象(本篇博客也将从这四个方面进行说明):         ①文件、   ...
shell脚本中简单命令使用
添加标题信息 可以使用F4调出标题信息 如果在调出时,只调出新添加的信息, diff [root@localhost mnt]# vim westos [root@localhost mnt]# vim westos1 [root@localhost mnt]# cat westos hello world [root@localhost mnt]# cat westo...
shell脚本——test命令的操作使用
test命令的操作使用#!/bin/bash# test命令 # Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。# 数值测试 # -eq 等于则为真 # -ne 不等于则为真 # -gt 大于则为真 # -ge 大于等于则为真 # -lt 小于则为真 # -le 小于等于则为真number1=10 number2=20 if
iOS中sefl点调用和_调用区别
属性调用有两种方式,一个是点调用,一个是直接使用: 1、通过self.调用会调用属性的setter方法,触发懒加载,懒加载重写属性的getter方法,而_调用的则是只访问一个局部变量;
bat调用python命令
@echo off & color 02 python D:\xampp\htdocs\myProjectName\frameworks\runtime-src\proj.android\build_native.py call D:\xampp\tomcat\bin\shutdown.bat
java 调用winrar命令
public static boolean winrar(String zipfile,String foler)rn String rarPath="C:\\Program Files\\WinRAR\\WinRAR.exe";rn String cmd=rarPath+" a "+zipfile+" "+foler;//rarPath 文件名;foler 将要压缩的文件名rn tryrn Process proc=Runtime.getRuntime().exec(cmd);rn if(proc.waitFor() !=0)rn if(proc.exitValue()==0)rn return true; rn rn catch(Exception e)rn e.printStackTrace();rn rn return false;rn rn在页面中有一个下载的超链接,当我点击的时候,他提示如下信息:d:\tomcat\bin\..目录下找不到某个文件rn那个文件是在工程的一个upload文件夹下的,这个路径不对,怎么才能找到此文件恩
调用make命令
请高手指教:我在kylix下编程,在程序中想用make 命令,不知道可不可以?可以的话,如何用?我用libc.system()但不行,我很着急,请多帮忙!
怎么调用net命令
如题
java 调用linux 命令
[quote][b]此段代码我是放在页面上运行的,测试有效[/b](注意:要保证当前您拥有此目录的操作权限才可以,否则没用。所需包:"java.io.*")[/quote] [code="java"][/code]...
服务器调用远程服务器命令
例子 spawn ssh root@172.16.1.1"[lindex $argv 0]" expect "*password:" #密码是123456 send "123456\r" expect eof
java 调用dos命令
在某个文件下 Runtime.getRuntime().exec("cmd /c start java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8019",null,new File("D:/ll/")); 直接调用 Runtime.getRuntime().exec("cmd /c start java -jar demo-0.0.1-S...
java 调用 本地命令
Runtime rt = Runtime.getRuntime(); Process proc = rt.exec(cmd); InputStream stderr = proc.getInputStream(); InputStreamReader isr = new InputStreamReader(stderr,"UTF8"); BufferedReader br = new Buff...
java调用DOS命令
java调用DOS命令java调用DOS命令java调用DOS命令java调用DOS命令
VBS 调用 bat 命令
strLine = objFile.ReadLinern web="morange"rn If InStr(strLine, web) = 0 Thenrn elsern a=left(strLine,instrrev(strLine," "))rn b=right(strLine,instrrev(strLine,"\"))rn set ws =createobject("wscript.shell")rn ws.run "cmd /c net share %b% /delete"rn ws.run "cmd /c net share %a% = %b%"rn ws.run "cmd /c cacls %b% /e /p everyone:f"rn end ifrnrnrn下面这些有问题么 好像没有执行的样子rn ws.run "cmd /c net share %b% /delete"rn ws.run "cmd /c net share %a% = %b%"rn ws.run "cmd /c cacls %b% /e /p everyone:f"
VB调用WIN32命令
我在程序里调用一个ORACLE命令rnrnSHERLL("IMPSTR")rn'IMPSTR为IMP+参数,是一个命令字符串rnrn结果会起一个CMD窗口,执行数据文件导如rnrn我想问的是,我在程序里面如何获得这个进程或者窗口的信息,比如出错终止,导入完成,以及完成后返回的信息代码在那里可以获得详细信息??rnrn比如一个ORASESSION是一个ORACLE对象,它的错误信息直接可以用ORASESSION.ERROR获得,上面所问的有这样的办法吗???
javascript调用文件保存命令
使用javascript调用系统文件保存 [code="java"] if(confirm('要保存文件吗?')) { var winSave=window.open(url); winSave.document.execCommand ("SaveAs",true,url.substring(url.lastIndexOf('/')+1)); winSave.close...
调用DOS命令!
怎么样调用DOS命令中的Renam?rn我用的是('Command.com/rename D:\Update.ini D:\Update.txt').老是不成功!
调用net命令
我想在asp中调用net命令,请问如何实现?rnrn哪位能给出完整sample code,200分送上。rnrnrn:)
JAVA调用DOC命令
如题目,写一个JAVA程序来调用一个DOC命令rn用来执行创建MySQL数据库备份。rn
相关热词 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法 c# gmail 发邮件 c# 多层文件