前言

考察下面的脚本:

1
emcc -o ./dist/test.html --shell-file ./tmp.html --source-map-base dist -O3 -g4 --source-map-base dist -s MODULARIZE=1 -s "EXPORT_NAME=\"Test\"" -s USE_SDL=2 -s LEGACY_GL_EMULATION=1 --pre-js ./pre.js --post-js ./post.js --cpuprofiler --memoryprofiler --threadprofilermain.cpp

这里在调用 emcc 进行 WebAssembly 编译时,组织了很多参数。整个命令都在一行之中,不是很好阅读和维护。

换行

可通过加 \ 的方式来进行换行拆分。

改造后看起来像这样,一个参数占一行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
emcc -o ./dist/test.html\
 --shell-file ./tmp.html\
 --source-map-base dist\
 -O3\
 -g4\
 --source-map-base dist\
 -s MODULARIZE=1\
 -s "EXPORT_NAME=\"Test\""\
 -s USE_SDL=2\
 -s LEGACY_GL_EMULATION=1\
 --pre-js ./pre.js\
 --post-js ./post.js\
 --cpuprofiler\
 --memoryprofiler\
 --threadprofiler\
 main.cpp

注释

通过 \(backslash) 换行后,整体阅读体验好了很多。进一步,我们想要为每个参数添加注释,发现不能简单地这样来:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
emcc -o ./dist/test.html\ # 目标文件
 --shell-file ./tmp.html\ # 模板文件
 --source-map-base dist\
 -O3\
 -g4\
 --source-map-base dist\
 -s MODULARIZE=1\
 -s "EXPORT_NAME=\"Test\""\
 -s USE_SDL=2\
 -s LEGACY_GL_EMULATION=1\
 --pre-js ./pre.js\
 --post-js ./post.js\
 --cpuprofiler\
 --memoryprofiler\
 --threadprofiler\
 main.cpp

这样会导致整个 shell 脚本解析失败。

实测发现,也不能这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
emcc -o\
 # 目标文件
 ./dist/test.html\
  # 模板文件
 --shell-file ./tmp.html\
 --source-map-base dist\
 -O3\
 -g4\
 --source-map-base dist\
 -s MODULARIZE=1\
 -s "EXPORT_NAME=\"Test\""\
 -s USE_SDL=2\
 -s LEGACY_GL_EMULATION=1\
 --pre-js ./pre.js\
 --post-js ./post.js\
 --cpuprofiler\
 --memoryprofiler\
 --threadprofiler\
 main.cpp

同样会导致解析失败。

说到底,通过 \ 拆分的命令,只是呈现上变成了多行,其中插入的注释是会破坏掉语义的。

但也不是没办法添加注释了,几经周转发现如下写法是可行的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
emcc -o ./dist/test.html `# 目标文件` \
 --shell-file ./tmp.html `# 模板文件` \
 --source-map-base dist `# source map 根路径` \
 -O3 `# 优化级别` \
 -g4 `# 生成 debug 信息` \
 --source-map-base dist\
 `# -s MODULARIZE=1\`
 -s "EXPORT_NAME=\"Test\""\
 -s USE_SDL=2\
 -s LEGACY_GL_EMULATION=1\
 --pre-js ./pre.js\
 --post-js ./post.js\
 --cpuprofiler\
 --memoryprofiler\
 --threadprofiler\
 main.cpp

即通过 `(backtick) 来包裹我们的注释,就不会破坏掉脚本的语义了,能够正确解析执行。

进一步,解决了注释的问题,如果我们不想要某一行,同时又不想删除,可以像下面这样来注释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
emcc -o ./dist/test.html `# 目标文件` \
 --shell-file ./tmp.html `# 模板文件` \
 --source-map-base dist `# source map 根路径` \
 -O3 `# 优化级别` \
 -g4 `# 生成 debug 信息` \
 --source-map-base dist\
 -s MODULARIZE=1\
 -s "EXPORT_NAME=\"Test\""\
 -s USE_SDL=2\
 -s LEGACY_GL_EMULATION=1\
 `# --pre-js ./pre.js`\
 --post-js ./post.js\
 --cpuprofiler\
 `# --threadprofiler`\
 --memoryprofiler\
 main.cpp

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

转载自:https://www.jb51.net/article/165139.htm

Linux 一条长命令占用多行的更多相关文章

  1. linux 添加常用长命令别名

    ## 设置linux下常用命令别名,提高效率 将要使用的命令别名写入到~/.bashrc文件,通过source ~/.bashrc命令使变更生效 alias sst='systemctl status ...

  2. Linux实战教学笔记12:linux三剑客之sed命令精讲

    第十二节 linux三剑客之sed命令精讲 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件 ...

  3. linux三剑客之sed命令

    一.前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件等等.如果我们相对这些文件进行一些编辑查询等操作时,我们可能会想到一些vi,vim,cat,more等命令.但是这些命令 ...

  4. Linux 一条命令杀死占用端口的所有进程

    Linux 一条命令杀死占用端口的所有进程 2018年05月28日 19:43:05 gq97 阅读数 7655更多 分类专栏: Linux   版权声明:本文为博主原创文章,遵循CC 4.0 BY- ...

  5. Linux 性能监控之命令行工具

    引言 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.这些命令行工具可以在各种Linux系统下使用,可以用于监控和查找产生性能问题的原因.这个命令行工具列表提供了足够的 ...

  6. 显示器 Linux 性能 18 (一个命令行工具传递)

    对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一名Linux系统的管理员工作5年后,我逐渐认识到监控和保持系统启动并执行是多么的不easy.基于此原因. ...

  7. 【No.2】监控Linux性能25个命令行工具

    接着上一篇博文继续 [No.1]监控Linux性能25个命令行工具 10:mpstat -- 显示每个CPU的占用情况 该命令可以显示每个CPU的占用情况,如果有一个CPU占用率特别高,那么有可能是一 ...

  8. 【No.1】监控Linux性能25个命令行工具

    如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?通过以下命令或者工具可以快速定位 top vmstat lsof tcpdump netsta ...

  9. 【Linux】1、命令行及命令参数

    命令行及命令参数 文章目录 命令行及命令参数 1.命令行提示符 2.命令和命令参数 简单的命令 date ls 命令参数 短参数(一个字母) 长参数(多个字母) 参数的值 其它参数 3.小结 4.参考 ...

随机推荐

  1. Fedora30 install VS Code

    We currently ship the stable 64-bit VS Code in a yum repository, the following script will install t ...

  2. 使用PHP开发HR系统(2)

    本节讲述如何创建基于CI框架的PHP程序. ============================================================================== ...

  3. Bootstrap-table 使用总结,和其参数说明

    转载于:https://www.cnblogs.com/laowangc/p/8875526.html 一.什么是Bootstrap-table? 在业务系统开发中,对表格记录的查询.分页.排序等处理 ...

  4. springboot笔记05——profile多环境配置切换

    前言 一个应用程序从开发到上线,往往需要经历几个阶段,例如开发.测试.上线.每个阶段所用到的环境的配置可能都是不一样的,Springboot 应用可以很方便地在各个环境中对配置进行切换.所以,今天主要 ...

  5. isolate sqflite demo

    main.dart import 'package:flutter/material.dart'; import 'demo_isolates.dart'; import 'package:rxdar ...

  6. 【阿里云开发】- 搭建和卸载svn服务器

    Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据. 这些数据放置在一个中央资料档案库(repository) 中.这个档案库很像一个普 ...

  7. 【转载】 C#中List集合使用InsertRange方法在指定的位置插入另一个list集合

    在C#的List集合操作过程中,如果在集合中的某个位置插入一个新的元素对象,可以使用Insert方法进行操作.其实List集合也提供了在特定的位置插入另一个集合,然后另一个集合的数据整个写入到当前集合 ...

  8. fastjson源码分析之序列化

    fastJson是很常用的序列化工具,用了这么久一直想底层看一下它的设计,探究一下它序列化和反序列化效率高的秘密.现在从最基础的用法开始,一点点揭开fastJson神秘的面纱.(版本:1.2.50) ...

  9. SVN上文件出现左侧黄色箭头右侧绿色箭头的双向箭头

    转自:https://blog.csdn.net/jiuweihu521/article/details/90902152 与资源库对比又没有要提交的东西,网上说删除这个目录,然后更新整个配置库..我 ...

  10. python使用tkinter无法获取输入框的值

    如果遇到:使用tkinter无法获取输入框Entty()的值的问题,需要检查一下,是否在定义Entry()时立即进行了pack() 会出现使用entryname.get()报错 解决方法:把定义和pa ...