为什么printf和sudo的工作方式不一样?

我有一个简单的脚本来转换一个文本文件的颜色转义序列到实际的字符。 它工作,如果我直接运行它,而不是与sudo

设置脚本:

的test.txt

\e[1;34mTEST\e[0m\n 

test.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

我不知道是否有一个特定的需要在一个单独的文件中的颜色编码的string,然后写出到另一个,但以下工作正常与-i标志:

 #!/bin/bash string="\e[1;34mTEST\e[0m\n" printf "${string}"