管道和重定向是 Linux 中两个最强大的功能,我喜欢它们。
但是,我遇到了一种情况,我需要在不使用管道、重定向或函数的情况下将一段固定的文本写入文件。
我正在使用 Bash 以防万一。
如果有更简单的解决方案,我会解释原因。
我有一个带有一些菜单条目的后台 yad 通知。在某些菜单项中,我希望通知将一段固定的文本写入文件。这是我的意思的一个例子。
yad --notification --command=quit --menu='Example!echo sample >text.txt'
Run Code Online (Sandbox Code Playgroud)
问题是 yad 不接受重定向,所以它从字面上打印字符串sample >text.txt
而不是重定向。
同样,管道符号 ( |
) 是 yad 中的分隔符;但是如果你改变它,yad 会把它当作一个文字字符。例如:
yad --notification --command=quit --separator='#' --menu='Example!echo sample | tee text.txt'
Run Code Online (Sandbox Code Playgroud)
这从字面上打印字符串sample | tee text.txt
而不是管道。
编写一个供 yad 调用的函数也没有意义,因为 yad 运行在它自己的空间中并且无法识别该函数。
因此,我想要一个像echo
,cat
或者printf
将输出文件作为参数而不是重定向的命令。我已经搜索过这样的命令,但找不到。
当然,我可以自己编写并将其放在默认路径中:
FILENAME="${1}"
shift
printf '%s\n' "${*}" >"${FILENAME}"
Run Code Online (Sandbox Code Playgroud)
进而
yad --notification --command=quit --menu='Example!myscript text.txt sample'
Run Code Online (Sandbox Code Playgroud)
但是,如果 Linux 还没有这样的东西,我确实会感到惊讶!
谢谢