【问题标题】:How to get the argument after the less than symbol (<) in bash script?如何获取bash脚本中小于号(<)之后的参数?
【发布时间】:2014-06-12 17:22:05
【问题描述】:

例如,我有

./run.sh < file.dat

如何在 run.sh 中获取参数“file.dat”?

【问题讨论】:

  • &lt; 后面的不是./run.sh 的参数。 file.dat 的内容通过 bash(或您使用的任何 shell)流式传输到命令中,而命令永远不知道它。
  • 你没有。 bash 已经将该文件附加到 stdin
  • @harpo,我想他想知道是否有办法抓住它。 :)
  • 您想要名称,还是文件的内容真的很重要?如果您想要文件的内容,只需按照通常的方式从标准输入中读取。另外,如果输入没有被重定向,或者它来自管道,会发生什么?
  • @Fei:听起来您应该将此输入作为实际参数,而不是通过重定向标准输入。

标签: linux bash command-line-arguments


【解决方案1】:

在 Linux 上,您可以从 /proc 获取此数据:

#!/bin/bash
readlink /proc/$$/fd/0

这将打印作为标准输入打开的任何内容的路径,例如您的示例中的file.dat

请注意,以这种方式获取文件名并不是处理文件的正确方式,应纯粹用于调试和提供信息。

要处理数据,您应该直接从标准输入读取数据。例如,使用IFS= read -r myline; echo "$myline" 读取行以读取单行,或使用mydata=$(cat); echo "$mydata" 读取所有行。

【讨论】:

  • +1;方便知道。警告:在某些 Linux 版本上 - 例如,Ubuntu 12.04 - realpathalias,而不是可执行文件,因此除非您采取措施使该别名在您的脚本中可用,否则这将不起作用。在所述平台上,别名定义为alias realpath='python -c '\''import os, sys; print os.path.realpath(sys.argv[1])'\'''
  • @gniourf_gniourf 优秀的指针,谢谢。 AFAIK(我不确定),所有 Linux 风格都有一个 readlink 实用程序,所以 readlink /dev/fd/0 是更便携的选择。
猜你喜欢
  • 2019-02-08
  • 2021-09-10
  • 2015-01-14
  • 2015-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
相关资源
最近更新 更多