【问题标题】:Cat redirection auto kill?猫重定向自动杀死?
【发布时间】:2013-06-14 06:59:25
【问题描述】:

我正在尝试执行以下操作:

cat > somefile "some text" <ctrl+d>; clear; some other program

但无需按下 这样该行将创建文件,然后运行其他程序。我试过 echo "some text" > somefile;但是有太多的特殊字符。任何人都知道解决这个问题的方法

【问题讨论】:

  • 你的问题不清楚;这里的文档会满足您的要求,还是您实际上需要来自用户的输入?那么你怎么知道用户何时完成?但是,如果需要单行输入,read 命令会执行此操作。在某些版本的 shell 中,它还具有超时功能。

标签: linux unix signals cat


【解决方案1】:

认为您可能正在寻找的是以下方面的内容:

pax> cat >tempfile ; tput clear ; someprog
Enter your data here for tempfile
<ctrl-d>
**screen clears and someprog runs**

结束文件 CTRL-D 不是您输入的 command 的一部分,它是cat 命令的输入流的一部分。

如果你不想使用输入流,你要么必须解决 echo 变体(学习拥抱 shell 转义的美妙世界 - 你可以绕过 大多数 只使用单引号而不是双引号),或者只是提前创建输入文件并使用类似的东西:

cp sourcefile tempfile ; tput clear ; someprog

【讨论】:

  • 已编辑我正在尝试这样做,因此您不必按 ctrl+d 它会自动退出;什么的。
  • @Morki,我不确定 any 字符如何优于 CTRL-D,因为无论如何您都必须输入额外的字符。请参阅我的答案的第二部分,无需额外的用户输入(除了创建一次sourcefile)。
【解决方案2】:

如果您想在somefile 中多行或使用特殊字符编写一些文本,您应该试试这个。 EOF 在这里被视为一个特殊的字符串,它会在找到时自动终止cat,但也可以是其他任何字符串。

cat > somefile << EOF
some text
EOF

some other program 

【讨论】:

  • 其实EOF一点都不特别;您可以在&lt;&lt; 之后放置您喜欢的任何内容,并且该字符串第一次出现在一行上将终止所谓的此处文档。这是一个 shell 工具,不是cat 的功能。
  • 是的,我知道,我说得模棱两可,你说得对。 => 已编辑。
  • 你可以做类似 cat > somefile
  • 通常称为heredoc
猜你喜欢
  • 1970-01-01
  • 2018-05-09
  • 2019-08-12
  • 2016-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-03
  • 1970-01-01
相关资源
最近更新 更多