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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM