![为什么 printf 与 sudo 的工作方式不同?](https://linux22.com/image/643521/%E4%B8%BA%E4%BB%80%E4%B9%88%20printf%20%E4%B8%8E%20sudo%20%E7%9A%84%E5%B7%A5%E4%BD%9C%E6%96%B9%E5%BC%8F%E4%B8%8D%E5%90%8C%EF%BC%9F.png)
我有一个简单的脚本,可以将带有颜色转义序列的文本文件转换为实际字符。如果我直接运行它,它会起作用,但使用 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}"