pretty code

2024年7月10日 星期三

2024 week 28 新玩意

01. 工作站 grep

假設我要找 cell,但不要 .db 的檔案。

grep -r pattern --exclude="*.db"

也可以正向表列

grep -r pattern --include="*.lib"

至於為什麼要加上雙引號?那是因為整個指令傳給 grep 時,*.lib 會被 shell 轉譯過一遍,所以會造成問題,因此要加上雙引號或單引號。

不過照連結所述,當前目錄如果沒有 .lib 檔案應該是要沒問題的,我不確定是否是工作站 grep 版本過舊導致。


晚上用 Windows 11 WSL - Ubuntu 22.04.2 LTS 試了一下,確實是不用加上星號,看來是版本問題?


2024/07/12 更新

更精確來說,既然問題是出在被 shell 過了一手,那應該是 shell 版本的問題,工作站使用的是 tcsh,在我改用 bash 後,這個問題就消失了。

為了之後工作效率著想,以後不管是 glob or regex pattern,最好都用雙引號框住,才不會在急著需要做甚麼事的時候又出問題。

晚上在 WSL 裝了 tcsh 6.21.00,不加上雙引號仍然會有問題,開始懷疑是 tcsh 的 feature 了XD



02. Yosy 執行方式

Yosys 總共有好幾種執行方式:

Run directly
直接執行,手動下 command。

-c *.tcl ( refer to tcl command )
將指令寫在 tcl script 中,最前面要加上 yosys -import,才可以執行 yosys command。

使用這個模式的好處是可以用 tcl 語法,靈活性最大。

-s *.ys ( refer to script command )
將指令寫在 script 中,與 -c 差別在不需要 yosys -import 就可以執行 yosys command。

也因為不是走 tcl callbak,故整個檔案的解析都在 run_frontend 這個函數中。

yosys *.ys
同上,會在 run_frontend 中,執行 default auto command 並靠副檔名決定執行 script command。

嚴格來說上面兩個 run_frontend 執行的地方不一樣,這裡是在 while (optind < argc) 的敘述裡。

yosys xxx
因為沒有副檔名可供判斷,故在 run_frontend 中便會報錯。


03. 工作站 Shell

因為 EDA tool 緣故,大部分工作站預設的 Shell 都是跑 csh(tcsh)。但是自己寫的 Shell script,如果第一行沒有指定 Shell,則預設是跑 bash。

我想一般人應該都是比較熟悉 bash 吧?我不確定此行為是我們工作站獨有,還是 Linux 都是這樣?不過經我剛才在 WSL Ubuntu 上 22.04 實測,看起來未指定第一行會以預設 Shell 來執行。


04. alias 進階用法


雖然我後來才知道有 realpath 這個外部 command 可用,但當初想知道如何用 awk 達成此目的,也算在 shell script 中撞了一堆坑,故想要留下個記錄。以後凡事還是要先 Google,畢竟你的需求別人應該也早就碰到過了,很多事應該不用都自己來才合理。

話說回來,想要用 alias 包裝 command,遇到像雙引號或是 $ 這種特殊符號,就是用接續的方式來處理指令。

畫橘色線的是一個一個串接指令的字串,雙引號和 $ 是直接在 Shell 中,故要加上跳脫字元。

我這裡用的 shell 是 bash,tcsh 也是同樣的道理,差別在 alias 語法不是用等號而是空白。

2024/07/19 更新

晚上實測一下,realpath 無法接受 pipeline,故也不是萬能!

想要在當前目錄下找 Cell Library - realpath *.lib
想要用 grep 遞迴搜尋 Cell name - 還是只能用 awk 也就是這邊用的 alias ($9 改 $1 比較通用,有需要再用 awk 切一次)方式。

沒有留言: