我发现了一个名为espeak的好命令。 它可以从标准输入读取并说出其结果。
public void MyUpdate(MyType foo)
{
/*Prep code for the loops*/
foreach (Thing bar in something)
{
foreach (Collection item in bar.Stuff)
{
Data dataRX = item.First;
if (dataRX != null && dataRX.ID.Equals(globalNonsense.ID))
{
// Update Data with the latest changes
dataRX.fooBuddy = foo;
goto exitLoops;
}
}
}
exitLoops: ;
}
无论如何,它运行正常,但我认为每次将$ du -sh . | espeak
$ ls -a | grep foobar | espeak
etc
放到一行的末尾并不高效。
所以我想自动插入它而不用手工打字。
有没有很好的方法来实现这个目标?
答案 0 :(得分:4)
假设您还想查看输出,可以这样做:
exec > >(tee >(espeak))
将stdout
重定向到tee
进程,该进程将所有内容发送到espeak
进程,并将其发送到控制台或stdout
之前发送到的任何进程。 (对于那些在家中关注的人来说,stdout
进程的tee
在启动时尚未重定向,因此它仍然与exec
之前相同命令。)
玩得开心。
将其关闭:
exec > /dev/tty
答案 1 :(得分:0)
在zsh中,有一个小部件accept-line
在接受输入行时被触发。您可以使用自己覆盖默认小部件,如下所示:
function accept-line
{
#here, add espeak to the current command
BUFFER=$BUFFER" | espeak"
# to be clear, if the input string was 'ls -l',
# now it is 'ls -l | espeak', and this is the command that will be executed
# trigger the real widget to accept the line and run the input buffer
zle .accept-line
}
# register your new accept-line widget to replace the builtin one
zle -N accept-line
在这里,我使用了名称accept-line
但是如果您想要命名覆盖函数my_superOverride
,您可以在最后覆盖默认小部件:
zle -N accept-line my_superOverride
唯一的缺点是,对于像do something ; do something else
这样的命令,它只会说do something else
的输出。