Bash
為什麼 printf 與 sudo 的工作方式不同?
我有一個簡單的腳本,可以將帶有顏色轉義序列的文本文件轉換為實際字元。如果我直接執行它,它可以工作,但不能使用 sudo。
要設置腳本:
測試.txt
\e[1;34mTEST\e[0m\n
測試.sh (+x)
printf "`cat $1`" > test.bin
- 執行
./test.sh test.txt
然後cat test.bin
給出TEST
藍色。- 執行
sudo ./test.sh test.txt
然後cat test.bin
給出\e[1;34mTEST\e[0m\n
這裡發生了什麼?
筆記:
- 執行
sudo bash -c "./test.sh test.txt"
給出了正確的輸出 - 為什麼會這樣?echo -e
行為相同printf
試試
sudo -i ./test.sh
。我不知道是否有特殊需要將顏色編碼的字元串放在一個單獨的文件中,然後將其寫到另一個文件中,但是沒有
-i
標誌,以下工作正常:#!/bin/bash string="\e[1;34mTEST\e[0m\n" printf "${string}"