我正在尝试使用程序通过管道传输带有特殊字符的字符串(例如HG@eg3,l'{TT\"C!
到另一个命令(termux-clipboard-set)read
。似乎read
旨在创建一个临时变量(例如read temp
),然后将其传递给另一个命令(例如termux-clipboard-set $temp
)。
我想知道是否有更快的方法来使用管道来做到这一点,例如:read | termux-clipboard-set
?
更新:抱歉,我忘了提及我正在寻找可以在 bash (termux) 上运行的东西。
对于
bash
,read
不是一个程序。read
是一个内置的。简化后,read
读取stdin
输入并将其分配给变量。内置函数read
不会在 上产生任何输出stdout
,因此尝试通过管道传输stdout
不会产生任何结果。问题是为什么。根据
man
页面显示,如果文本是从 读取的
stdin
,为什么要在前面放一些东西?当然,你可以cat | termux-clipboard-set
,但只termux-clipboard-set
要这样做就可以了。在 中
zsh
,read
内置支持cho-e
选项e
:如果您的系统仍然有一个
line
命令(仍然有一个,util-linux
但现在通常不包括在内),并且使用任何类似 POSIX 的 shell:该
line
命令可以写成 sh 函数,如下所示:head -n 1
做类似的事情,除了当不从终端读取时,大多数实现会按块读取,然后可能从输入中读取多于一行,即使它们只输出一行。read
并line
保证不会(尽管您需要确保使用 的选项-r
)read
。通过来自终端的输入,
不过应该可以。大多数
head
实现仍然支持过时的(但更短)head -1
。对于 tcsh,那就是:
1 它们还从终端设备按块读取,但
read()
处于模式的终端设备上的 sicanon
不会返回超过一行。