从带有参数的C++程序中调用shell脚本
Calling a shell script from a C++ program with parameters
我正在尝试从cpp程序调用shell脚本,并将一些变量传递给该脚本。该脚本只是将文件从一个目录复制到另一个目录。我想将文件名、源目录和目标目录从cpp程序传递到shell脚本。当我尝试时,忽略目录"/"时会出现错误。请问我该如何修复这个
C++代码:
std::string spath="/home/henry/work/gcu/build/lib/hardware_common/";
std::string dpath="/home/henry/work/gcu/dll/";
std::string filename="libhardware_common.a";
std::system("/home/henry/work/gcu/build/binaries/bin/copy.sh spath dpath filename");
外壳脚本代码:
SPATH=${spath}
DPATH=${dpath}
FILE=${filename}
cp ${SPATH}/${FILE} ${DPATH}/${FILE}
您的C++代码和shell脚本不在同一范围内。换句话说,C++中的变量在脚本中不可见,当传递到脚本时,这些变量将重命名为$1
、$2
,依此类推
要修复它,您可以将代码更改为以下内容:
std::string spath = "/home/henry/work/gcu/build/lib/hardware_common/";
std::string dpath = "/home/henry/work/gcu/dll/";
std::string filename = "libhardware_common.a";
std::string shell = "/home/henry/work/gcu/build/binaries/bin/copy.sh"
std::system(shell + " " + spath + " " + dpath + " " + filename);
通过这种方式,spath
将被它的值所取代,然后将其传递给您的脚本。
在您的脚本中,您可以使用:
cp $1/$2 $3/$2
或者如果您喜欢:
SPATH=$1
DPATH=$2
FILE=$3
cp ${SPATH}/${FILE} ${DPATH}/${FILE}
脚本永远不会知道C++代码中的变量名。当脚本被调用时,参数将被$1
、$2
。。。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 从带有参数的C++程序中调用shell脚本
- 如何使用Qt连接函数调用Shell Execute
- 在c++中使用popen调用cli实用程序时崩溃.适用于shell或fork、exec等
- 我们是否可以强制 shell 扩展显式调用 IShellIconOverlayIdentifier::GetOverla
- 有没有C++方法来调用 linux shell 命令
- 重复调用 shell 命令,通过管道捕获标准输出
- 在 C++ 中在后台调用类似于 Unix shell 脚本的函数
- 从shell调用脚本和使用system()有什么区别
- 如何检查c++源代码中是否有任何系统/shell调用
- Shell程序中execvp函数调用返回无法访问错误
- 如何使用从shell脚本调用的GDB运行程序,而shell脚本又通过boost::process从c++调用GDB