我不是一个高级 Linux 用户,我很难理解一些新概念。我最近阅读了有关xargs
命令的内容并想测试一些示例。其中一个让我非常困惑。
理论是这样的:如果我可以开始在vim
(使用vim someFile
)中编辑一个不存在的文件,并仅在编辑后(使用:qw
)创建它,那么我可以使用echo
和xargs
来做同样的工作:
echo "someFile" | xargs vim
xargs
echo
将获取from的输出stdout
并将其作为参数传递给vim
.然而这似乎会导致以下错误 -
Vim:警告:输入不是来自终端
最奇怪的是,打印错误后一秒钟vim
就会打开文件,但是当我保存它并退出时,vim
我的终端完全被窃听了。我需要关闭 tmux 窗格才能修复终端。所有这些之后,文件将被创建并且内容将如预期的那样。很明显这里有些不对劲,但我完全不知道为什么。
我找到了这个问题在 StackOverflow 中,但它没有回答我的问题。
答案1
stty sane
将纠正您的终端问题。
发生这种情况的原因是xargs
没有tty
在子进程中打开您的。
您需要添加“open tty”-o
选项。xargs
echo "sane" | xargs -o stty
这将stty sane
连接到您的终端运行。它不会产生错误。
echo "sane" | xargs stty
这会在 BSD 上产生错误:
stty:stdin 不是终端
在 Linux 上:
stty:“标准输入”:设备的 ioctl 不合适
这对我有用:
echo /etc/hosts | xargs -o vim