【问题标题】:Check if shell script is run via pipe检查shell脚本是否通过管道运行
【发布时间】:2016-05-31 14:46:39
【问题描述】:

我的脚本应该通过这样的管道运行:

echo "hello" | mysript.sh

我用input=cat读取输入

但是,如果它在没有管道猫等待输入的情况下运行 - 我该如何解决这个问题?

【问题讨论】:

  • 总的来说,顺便说一句,我同意木马——这通常是一个特性,而不是一个错误;它允许您在控制台输入输入,并在完成后使用^D 跟进。
  • 顺便说一句,这个问题可能不应该局限于管道,就像你在这里所做的那样。你会希望myscript <hello.txt不要中止,对吧?

标签: shell unix pipe


【解决方案1】:

没有什么需要修复的,因为它听起来就像其他所有通过stdin 接受输入的实用程序一样工作。这是一件好事。

【讨论】:

  • 不是每个其他实用程序。例如,tar 如果在没有输入文件的情况下运行并且 stdin 在创建模式中指向 TTY 时将退出并出现错误。
  • @CharlesDuffy 取决于您提供的选项:tar cf - . | (cd /path; tar xfv -) 应该可以正常工作。
  • 当然——在该示例中,没有 tar 内容写入或读取 TTY。
  • @CharlesDuffy 这个问题没有提到 TTY,我的回答也没有。
  • 该问题提到在没有提供输入源的情况下发生“挂起等待输入”。当然,他们在文本中指定了“管道”,但这是形式上的草率,而不是对合理意图的任何解释; myscript <in.txt 肯定是为了不出错地继续进行,无论in.txt 是一个常规文件、一个命名的 FIFO 等等。
猜你喜欢
  • 2013-03-06
  • 1970-01-01
  • 2010-10-29
  • 2019-06-06
  • 1970-01-01
  • 2019-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多