Linux 一条长命令占用多行
前言
考察下面的脚本:
|
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 一条长命令占用多行的更多相关文章
- linux 添加常用长命令别名
## 设置linux下常用命令别名,提高效率 将要使用的命令别名写入到~/.bashrc文件,通过source ~/.bashrc命令使变更生效 alias sst='systemctl status ...
- Linux实战教学笔记12:linux三剑客之sed命令精讲
第十二节 linux三剑客之sed命令精讲 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件 ...
- linux三剑客之sed命令
一.前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件等等.如果我们相对这些文件进行一些编辑查询等操作时,我们可能会想到一些vi,vim,cat,more等命令.但是这些命令 ...
- Linux 一条命令杀死占用端口的所有进程
Linux 一条命令杀死占用端口的所有进程 2018年05月28日 19:43:05 gq97 阅读数 7655更多 分类专栏: Linux 版权声明:本文为博主原创文章,遵循CC 4.0 BY- ...
- Linux 性能监控之命令行工具
引言 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.这些命令行工具可以在各种Linux系统下使用,可以用于监控和查找产生性能问题的原因.这个命令行工具列表提供了足够的 ...
- 显示器 Linux 性能 18 (一个命令行工具传递)
对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一名Linux系统的管理员工作5年后,我逐渐认识到监控和保持系统启动并执行是多么的不easy.基于此原因. ...
- 【No.2】监控Linux性能25个命令行工具
接着上一篇博文继续 [No.1]监控Linux性能25个命令行工具 10:mpstat -- 显示每个CPU的占用情况 该命令可以显示每个CPU的占用情况,如果有一个CPU占用率特别高,那么有可能是一 ...
- 【No.1】监控Linux性能25个命令行工具
如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?通过以下命令或者工具可以快速定位 top vmstat lsof tcpdump netsta ...
- 【Linux】1、命令行及命令参数
命令行及命令参数 文章目录 命令行及命令参数 1.命令行提示符 2.命令和命令参数 简单的命令 date ls 命令参数 短参数(一个字母) 长参数(多个字母) 参数的值 其它参数 3.小结 4.参考 ...
随机推荐
- Linux 中的 ~/. 表示的意思
在Linux中, ~ 表示用户的目录, 如用户名是Gavin, 那么~/表示 /home/Gavin 所以~/. 表示 用户目录下的隐藏文件. 扩展: 若以用户身份登录 ~ 表示 /home 目录 ...
- DBCP数据库连接池初探
1. 概述 数据库连接是很“宝贵的”,如果每次获取Connection都去创建数据库连接,使用之后就断开,再次使用又重新创建,程序效率是很低的.因为Socket连接的建立很消耗资源. 所以需要数据库连 ...
- 【转载】 C#使用string.IsNullOrWhiteSpace方法判断字符串是否为非空字符
在C#编程过程中,很多时候需要判断传入过来的字符串是否为Null或者空字符或者空白字符,此时就可以使用到string.IsNullOrWhiteSpace方法来判断,如果字符串为null或者空字符Em ...
- require.context实现前端工程自动化
require.context是什么 一个webpack的api,通过执行require.context函数获取一个特定的上下文,主要用来实现自动化导入模块,在前端工程中,如果遇到从一个文件夹引入很多 ...
- Vivado中备份设计好的block design
参考链接 https://blog.csdn.net/dimples_song/article/details/81391615 前言 为了不每次都重新生成block design,避免重复劳动. 可 ...
- Synopsys DC综合脚本示例
#****************************************************************************** # File : syn_example ...
- keychain不能导出p12证书的解决方法
点击左边下面的“我的证书”,然后点击右边的证书,打开下面有一个key导出就可以了.
- iOS编程——Objective-C KVO/KVC机制
来源:http://blog.sina.com.cn/s/blog_b0c59541010151s0.html 这两天在看和这个相关的的内容,全部推翻重写一个版本,这是公司内做技术分享的文档总结,对结 ...
- ABAP开发者上云的时候到了 - 现在大家可以免费使用SAP云平台ABAP环境的试用版了
之前Jerry已经写了一系列SAP Cloud Platform ABAP编程环境的文章,当时使用的环境,是SAP专门为SAP社区导师们创建的. 当时也有朋友留言,询问大家何时才能使用到免费的SAP云 ...
- 转 CentOS 初体验十四:阿里云安装Gitlab
原文 https://blog.csdn.net/zhaoyanjun6/article/details/79144175 非Unix操作系统(Windows) GitLab是专为Unix操作 ...