我觉得我在这里似乎遗漏了一些明显的东西,但是我似乎无法弄清楚发生了什么.我有一个从C代码调用的perl脚本.脚本参数是这样的:

my_script "/some/file/path" "arg" "arg with spaces" "arg" "/some/other/file"

当我在Windows中运行它时,Perl正确地将其标识为5个参数,而当我在SunOS Unix计算机上运行它时,它标识为8,将带有空格的arg拆分为单独的args.

不知道它是否有任何区别,但是在Windows中,我像这样运行它:

perl my_script

在Unix中,我只是将其作为可执行文件运行,如上图所示.

知道为什么Unix无法正确管理该参数吗?

编辑:

这是调用perl脚本的代码:

char cmd[1000];

char *script = "my_script";

char *argument = "\"arg1\" \"arg2\" \"arg3 with spaces\" \"arg4\" \"arg5\"";

sprintf( cmd, "%s %s >1 /dev/null 2>&1", script, arguments);

system( cmd );

并非如此,因为我动态地构建了参数字符串,但这是要点.

另外,这是我的代码,用于读取以下参数:

($arg1, $arg2, $arg3, $arg4, $arg5) = @ARGV;

我知道这很荒谬,但是该脚本只能从C应用程序运行,因此不需要任何更复杂的事情.

解决方法:

想必

system("my_script \"/some/file/path\" \"arg\" \"arg with spaces\" \"arg\" \"/some/other/file\");

导致所有内容都经过重击(因为需要解释shebang行,吃掉您传递的引号).再次,大概可以通过直接调用perl而不是依靠shell来找到它来避免该问题(尽管如果路径上的perl与shebang线上提供的perl不同,则可能会出现问题).

更新:

鉴于您:

char *argument = "\"arg1\" \"arg2\" \"arg3 with spaces\" \"arg4\" \"arg5\"";

您可能要尝试:

char *argument = "\\\"arg1\\\" \\\"arg2\\\" \\\"arg3 with spaces\\\" \\\"arg4\\\" \\\"arg5\\\"";

另一个更新:

感谢您接受我的回答,但是,我的整个理论可能是错误的.

我在GNU bash中尝试了上述参数的双反版本,版本为4.0.28(2)-release(i686-pc-linux-gnu),但最终通过了

[sinan@kas src]$./t

'"arg1"'

'"arg2"'

'"arg3'

'with'

'spaces"'

'"arg4"'

'"arg5"'

而最初的论点就像一个魅力.我对此有些疑惑.也许SUN上的外壳不是bash,或者可能正在发生其他情况.

标签:linux,perl

来源: https://codeday.me/bug/20191024/1920458.html

linux命令行参数含空格,linux-具有命令行参数和空格的Perl脚本相关推荐

  1. linux命令行参数含空格,Linux的命令行参数风格

    在Linux中,几乎所有程序都会提供几个命令行选项,有些程序提供的命令行参数多到咂舌!这样做使得程序的运行非常灵活,而且程序的配置信息可以由脚本指定,这对于作为管道或过滤器的程序尤其重要.有三种约定可 ...

  2. Linux源码研究-用户管理员手册-内核命令行参数

    下面的列表是__setup(), core_param()和module_param()宏实现的内核参数,内核从命令-开始解析参数,如果参数不被识别,也不包含".",参数会被用来启 ...

  3. linux读取命令行参数,Linux学习笔记(五)—— Linux命令行参数

    一.客户端输入 脚本执行的过程是对数据变量进行处理的过程,之前在脚本中处理的数据都是静态数据,而不是和客户端交互的动态数据.在大多数情况下脚本执行过程需要和客户端进行交互,用来获得脚本处理的数据,这些 ...

  4. 命令行收集(DOS/Linux/nc/xscan/xsniffer)

    #1 一: net use \\ip\ipc$ " " /user:" " 建立IPC空链接 net use \\ip\ipc$ "密码" ...

  5. linux shell 宏定义_Linux系统和Shell命令行简介,走上数据分析之路

    122Linux系统和Shell命令行简介,走上数据分析之路 本节作者:刘永鑫 中国科学院遗传与发育生物学研究所 版本1.0.2,更新日期:2020年8月31日 本项目永久地址:https://git ...

  6. Linux学习记录-----《快乐的Linux命令行》.

    之前自学python的时候一直用的Win7,没想过,也有点怕使用Linux,可能人对未知的东西都有点恐惧,但是,但是,学了4个多月,退无可退了,不管是网站的部署,还是基于后端工作的需求,Linux的学 ...

  7. linux命令行大全 笔记,《Linux命令行大全》读书笔记

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? shell就是一个程序,它接受从键盘输入的命令,然后把命令传递给操作系统执行.当使用图像用户界面时,我们需要一个叫做终端 ...

  8. linux获取偶数行内容,linux命令(39):shell 打印偶数行,奇数行 ,行号

    awk 命令: 1. 打印行号和内容: awk '{print NR":"$0}' 2. 输出:偶数行和奇数行到文件 awk '{print $0.txt > NR%2.tx ...

  9. linux 命令窍门,不容错过的Linux命令行窍门

    高效地使用命令行是一个Linux系统管理员技能的重要组成部分.在本文中,我们提供了五个很酷甚至略显古怪的Linux命令行技巧,可以帮你更有效地管理你的Linux系统. More=Less 在Linux ...

最新文章

  1. opencv拖动进度条_OpenCV GUI基本操作,回调函数,进度条,裁剪图像等
  2. C/S与B/S架构的区别和优缺点
  3. 002_SpringBoot整合Servlet
  4. egg.js java 生产数据_Egg 2.15.0 发布,阿里开源的企业级 Node.js 框架
  5. SSM:Spring整合MyBatis框架时出现 java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManaged
  6. 负载均衡工具 haproxy 集群安装部署完整流程
  7. Java类类getResourceAsStream()方法及示例
  8. Python学习笔记14(socket编程)
  9. mysql中添加中文存储和显示功能
  10. Xcode8报错:No code signature found
  11. multisim10元件库介绍
  12. 神经网络打印模型参数及参数名字和数量
  13. 【云原生|实践指北】5:真实业务场景下云原生项目落地实践学习
  14. 归并排序及“归并”思想的应用
  15. javabeans基础
  16. [转]忘记开机密码怎么办
  17. hashmap中的key是有序的么_HashMap是无序的
  18. 基于SpringBoot的实习管理系统
  19. config配置中心
  20. 怎样在自己的安卓软件中加入广告

热门文章

  1. 计算机网络-信道的极限容量
  2. 【Linux 内核 内存管理】优化内存屏障 ① ( barrier 优化屏障 | 编译器优化 | CPU 执行优化 | 优化屏障源码 barrier 宏 )
  3. 【Google Play】声明广告权限 ( you must declare the AD_ID Permission when your app targets Android 13 )
  4. 【Android 逆向】Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )
  5. 【Flutter】Dart 函数 ( 函数构成 | 私有函数 | 匿名函数 | 函数总结 )
  6. 【Java 网络编程】TCP 简介
  7. 【Android 应用开发】Paint 渲染 之 BitmapShader 位图渲染 ( 渲染流程 | CLAMP 拉伸最后像素 | REPEAT 重复绘制图片 | MIRROR 绘制反向图片 )
  8. PHP手机号中间四位用星号*代替显示
  9. Hadoop前期准备--centos7
  10. 好程序员web前端分享Nodejs学习笔记之Stream模块