Bash

為什麼 printf 與 sudo 的工作方式不同?

  • October 10, 2014

我有一個簡單的腳本,可以將帶有顏色轉義序列的文本文件轉換為實際字元。如果我直接執行它,它可以工作,但不能使用 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}"

引用自:https://serverfault.com/questions/634986