【问题标题】:Can somebody explain me this script line有人可以解释一下这个脚本行吗
【发布时间】:2017-09-02 09:29:15
【问题描述】:

谁能解释一下 AIX bash 脚本中的这个脚本行:

#!/bin/bash
touch /tmp/</.D2D

我想文件 /.D2D 中的行(项目)将被读取,文件将在 tmp 目录下被触及:

当/.D2D文件的内容是

file1
file2

然后将执行以下操作:

touch /tmp/file1
touch /tmp/file2

或者这个:

#!/bin/bash
PM=text
FILELIST=/tmp/$PM.</.filelist

这里的 FILELIST 将是一个数组,其中 /.filelist 的行与 /tmp/text.line1OfFilelistfile 和 /tmp/text.line2OfFilelistfile 等连接...

我的理解对吗? 谢谢

【问题讨论】:

  • 好的,回答的人的观点告诉了我正确的方法。上面的例子不起作用。我目前正在分析的脚本文件内部有格式/语法错误。所以“”必须替换为“$$”现在很清楚它是什么以及它做了什么。

标签: bash shell aix


【解决方案1】:

Touch 不从 Stdin 读取,因此输入重定向除了 bash 检查是否存在要重定向的文件之外没有其他作用。因此代码大致相当于

if [[ -f /.DSD ]]
then
  touch /tmp
else
  echo bash: /.DSD: No such file or directory 1>&2
fi

到目前为止的理论。在实践中,我猜这行有一个错字。

【讨论】:

  • 感谢您的回答。你觉得第二个怎么样?
  • 嗯,这完全是同一个问题。分配给变量时输入重定向没有意义......
【解决方案2】:

man page for touch 没有提到 touch 命令曾经从标准输入读取任何内容。因此,这些命令不会触及列表中的任何文件,它们只会触及那些直接在命令行中给出的文件。

要确认这一点,请使用 strace、ktrace、truss 等工具运行 bash 脚本。他们注销所有发生的系统调用。

【讨论】:

  • 感谢您的回答。你觉得第二个怎么样?
【解决方案3】:

好的,回答的人的观点向我展示了正确的方法。上面的例子不起作用。我目前正在分析的脚本文件内部有格式/语法错误。所以 ”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 2021-12-06
    • 2013-02-27
    • 2011-07-12
    • 1970-01-01
    相关资源
    最近更新 更多