我不是一个高级的linux用户,我有一个困难的时间围绕一些新的概念。我最近读到了关于xargs
命令的文章,并想测试一些例子。其中一个把我搞糊涂了。
理论是这样的:如果我可以开始编辑vim
中不存在的文件(使用vim someFile
),并且只在编辑它之后(使用:qw
)才能创建它,那么我可以使用echo
和xargs
来完成相同的工作:
echo "someFile" | xargs vim
xargs
将从stdout
获得echo
的输出,并将其作为参数传递给vim
。不过,这似乎会导致以下错误-
Vim:警告:输入不是来自终端
最奇怪的是,打印错误后的一秒,vim
会打开文件,但是当我保存它并退出vim
时,我的终端就完全被窃听了。为了修复终端,我需要关闭tmux窗格。在所有这些之后,文件将被创建,并且内容将如预期的那样。很明显,这里有些东西不对,但我完全不知道为什么。
我在StackOverflow中找到了这个StackOverflow,但它没有回答我的问题。
发布于 2023-01-17 05:27:13
stty sane
将纠正您的终端问题。
发生这种情况的原因是xargs
没有在子进程中打开您的tty
。
您需要在-o
中为"open“添加xargs
选项。
echo "sane" | xargs -o stty
它运行连接到终端的stty sane
。它不会产生错误。
echo "sane" | xargs stty
这会在BSD上产生一个错误:
史蒂:史丁不是终点站
在Linux上:
标准输入:设备不合适的ioctl
这对我起了作用:
echo /etc/hosts | xargs -o vim
https://unix.stackexchange.com/questions/732092
复制相似问题