将文件的输出重定向到写入命令
问题描述:
我正在尝试将文件的标准输出重定向到write
命令,并在其他用户的终端中显示文件的内容(包含颜色更改)。使用标准将文件的输出重定向到写入命令
,其输出将被显示的文件的内容是(文件名是menu_sys.sh)
echo -e "\t\t\033[4;41m Welcome to Internal Messaging System \033[0;0m"
当我使用的代码$ sh menu_sys.sh | write 680613
输出^[[4;41m Welcome to Internal Messaging System^[[0;0m
试过输出重定向使用&1>
但也没有工作
但我需要输出格式化的条件。
答
如果写命令允许任意控制字符发送到另一个用户的终端,那将是一个公然的安全问题。事实上,它消毒了要发送的消息的内容,从而使控制字符无害。这就是为什么您将ESC控制字符看作另一个用户终端上的两个ASCII字符'^'和'[''。
另外:如Jonathan Leffler所提到的,“文件的标准输出”没有任何意义。实际上,你似乎在做的是将命令的标准输出(echo
)发送到write
命令,而不是“文件的标准输出”。或者,如果您打算将文件的内容发送给其他用户(使用像write 680613 < somefile
这样的命令),那也可以。
术语“文件的标准输出”很奇怪;命令或程序具有标准输出 - 文件通常是发送命令的标准输出的地方,但文件没有自己的标准输出。你的脚本'menu_sys.sh'生成输出,并发送到'write 680613'。标准的'write'命令将尝试将该消息发送到用户'680613'的终端。是你吗?你期待转义序列做什么? – 2013-04-18 07:08:42
@JonathanLeffler没有终端用户'680613'是别人。通过术语文件的标准输出,我的意思是包含在文件menu_sys.sh中的代码的输出,我需要将输出显示给另一个终端上的另一个用户。使用转义序列我试图改变文本的颜色和背景颜色,其中显示欢迎使用内部消息系统文本 – debal 2013-04-18 07:47:27