为什么 printf 与 sudo 的工作方式不同?

为什么 printf 与 sudo 的工作方式不同?

我有一个简单的脚本,可以将带有颜色转义序列的文本文件转换为实际字符。如果我直接运行它,它会起作用,但使用 sudo 则不起作用。

要设置脚本:

测试.txt

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

测试文件(+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

答案1

尝试sudo -i ./test.sh

我不知道是否需要将颜色编码的字符串放在单独的文件中,然后将其写入另一个文件,但以下操作即使没有标志也可以正常工作-i

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

相关内容