将文件的输出重定向到写入命令

问题描述:

我正在尝试将文件的标准输出重定向到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>但也没有工作

但我需要输出格式化的条件。

+2

术语“文件的标准输出”很奇怪;命令或程序具有标准输出 - 文件通常是发送命令的标准输出的地方,但文件没有自己的标准输出。你的脚本'menu_sys.sh'生成输出,并发送到'write 680613'。标准的'write'命令将尝试将该消息发送到用户'680613'的终端。是你吗?你期待转义序列做什么? – 2013-04-18 07:08:42

+0

@JonathanLeffler没有终端用户'680613'是别人。通过术语文件的标准输出,我的意思是包含在文件menu_sys.sh中的代码的输出,我需要将输出显示给另一个终端上的另一个用户。使用转义序列我试图改变文本的颜色和背景颜色,其中显示欢迎使用内部消息系统文本 – debal 2013-04-18 07:47:27

如果写命令允许任意控制字​​符发送到另一个用户的终端,那将是一个公然的安全问题。事实上,它消毒了要发送的消息的内容,从而使控制字符无害。这就是为什么您将ESC控制字符看作另一个用户终端上的两个ASCII字符'^'和'[''。

另外:如Jonathan Leffler所提到的,“文件的标准输出”没有任何意义。实际上,你似乎在做的是将命令的标准输出(echo)发送到write命令,而不是“文件的标准输出”。或者,如果您打算将文件的内容发送给其他用户(使用像write 680613 < somefile这样的命令),那也可以。

+0

然后,我如何发送某些格式化的文本(如使用不同字体颜色的文本)到另一个用户的终端。我需要制作一个系统,用于向管理员的其他用户发送通知 – debal 2013-04-18 15:07:22

+0

您不需要。其中一个特别的问题是,你无法找出其他用户正在使用哪种终端类型('TERM'环境变量),所以即使系统允许你发送它们,你也不知道要发送哪些esacpe序列。 – Celada 2013-04-18 17:20:26

+0

那么是否有其他方法可以实现目标 – debal 2013-04-19 04:01:11