2013-07-25 38 views
1

对于特定的应用,可能有一个标志或配置可以设置,例如, git diff --no-pager控制是否有任何程序使用寻呼机(不能使用寻呼机)的标准方法是什么?

但我不想改变任何默认行为或任何东西。我只是试图强制(对于脚本PTY事件的特定实例)输出以非交互方式出现。

我能想到的两种方法:

​​......或者...... cat <(command)

这些命令在PTY(具体而言,它们通过script.sh发送到tmux要运行,就像tmux new-window script.sh),这实际上并不像运行脚本(就像它是如何写入的),而是像实际输入它一样。

我假设第一个cat方法实际上是要fork出一个程序并制作一个管道,以便可能慢一点。据我所知,虽然第二种方法做同样的事情。我怎样才能避开使用猫?这是一个真正有用的使用cat ??

我想到了两个办法:

mkfifo fifo 
command > fifo & 
cat fifo 

好吧,这看起来一个愚蠢的,是长手|

command > file & 
tail -f file 

如何知道文件写入完成的时间?

rm -f file 
touch file 
tail -f file & 
PID=$! 
command >> file 
kill $PID 

非常迂回。

还有其他可能的方法吗?哪一个最好?

回答

3

最好的方法是将cat指定为$PAGER,以便任何正确编写的应用程序只是转储它们的输出。

export PAGER=cat 
+0

Oooooh,这是整洁!我想知道是否有任何程序不检查PAGER,但仍可以去交互化。例如,我知道我实际上可以做像'printf'这样的东西\ n“| vim -c“:BundleInstall”',使Vim接受一个Enter(用于消除装载错误配置时出现的错误消息),这是此答案不包含的某些带外巧妙的示例。 –

+0

...仍然使用猫。也许我可以避开猫吗? (因为否则我只想管它给猫,因为我觉得有更高的机会会正常工作) –

+1

这些程序期望'$ PAGER'中有东西可以插入;猫是简单地回应未经修改的输入的最方便的选择。 –