Shell-Script
自動回顯 for 循環的內容
我經常使用for循環來轉換一堆文件格式。在某些情況下,如果發生文本轉換或變數,最好檢查替換是否正確執行。
for i in *; do convert $i ${i%jpg}png; done
有沒有一種簡單的方法來顯示執行的命令?按照上面的範例,類似以下內容:
convert image1.jpg image1.png # command output convert image2.jpg image2.png # command output # ...
set -x for file in *jpg; do convert "${file}" "${file%jpg}png" done set +x
設置
-x
shell 選項將顯示每個執行的命令,因為它設置為在所有參數擴展完成後執行。+x
撤消此操作。
對於這種事情,我也使用了
xtrace
選項(用/// …設置)set -x
,但是在一個子shell中:set -o xtrace``setopt xtrace``options[xtrace]=on
(set -x; for f (*.jpg) convert -- $f $f:r.png)
$f
(這也使作業控制更清晰,並且順便避免了使用該變數污染環境)。要在本地設置選項而不創建子外殼,您還可以使用匿名函式和
localoptions
選項。(){ set -o localoptions -x; for f (*.jpg) convert -- $f $f:r.png; }
(並為該匿名函式添加一個
local f
本地$f
函式)。for f (*.jpg) (set -x; convert -- $f $f:r.png)
會使它不那麼冗長(並節省一個過程)。
然而,在 ImageMagick 圖像轉換的情況下,您可以這樣做:
$ mogrify -verbose -format png -- *.jpg a.jpg JPEG 3264x1836 3264x1836+0+0 8-bit sRGB 2.07201MiB 0.050u 0:00.053 a.jpg=>a.png JPEG 3264x1836 3264x1836+0+0 8-bit sRGB 7.69297MiB 2.680u 0:02.640 b.jpg JPEG 3264x1836 3264x1836+0+0 8-bit sRGB 2.07201MiB 0.060u 0:00.050 b.jpg=>b.png JPEG 3264x1836 3264x1836+0+0 8-bit sRGB 7.69297MiB 2.650u 0:02.617