不能将gvim的stdout变成bash变量

时间:2013-05-08 01:53:26

标签: bash unix vim

在尝试回答this question时,我正在试验gvim --echo-wid,我认为这会与xdotool一起使用。

也许只是脑筋急促但我有一段时间将gvim --echo-wid的输出变为bash变量而不会阻挡

X=`gvim --echo-wid`

不起作用,反引号捕获似乎阻止了gvim的分叉和分离。 X仅在gvim终止后设置。

X=`gvim --echo-wid &`; echo "got: $X"

同样的故事。

mkfifo $F
(gvim --echo-wid > $F) &
X=`cat $F`

mkfifo $F
(gvim --echo-wid & > $F) &
X=`cat $F`

同样的故事。

我想要

  • gvim在后台
  • 它的stdout在一个bash变量中,同步

或任何其他方式我可以获得gvim的窗口ID为wmctrl或xdotool或一些等价物(没有查询某些列表,我想直接进入该实例的窗口而没有字符串黑客攻击)。

虽然在这一点上,我真的很好奇为什么捕获不起作用。是什么给了什么?

2 个答案:

答案 0 :(得分:0)

如果输出到stderr,则需要重定向

X=`gvim --echo-wid 2>&1`

答案 1 :(得分:0)

当gvim启动时,它会为gui分配一个新进程,这可以在后台运行,但是在整个程序关闭之前stdout不会关闭。

如果你将gvim管道加入头部,stdout会关闭,反引号会停止阻塞。

X=`gvim --echo-wid | head -n 1`
echo "got $X"