Shell-Script

自動回顯 for 循環的內容

  • March 24, 2022

我經常使用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

設置-xshell 選項將顯示每個執行的命令,因為它設置為在所有參數擴展完成後執行。 +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

引用自:https://unix.stackexchange.com/questions/696263