在Shell脚本中,如何使用文件内容作为参数

时间:2018-09-18 07:42:18

标签: bash shell

假设在dir.txt中,我具有以下内容:

test-dir

我尝试将其用作参数,如下所示:

echo dir.txt | cp * $1

我希望以上内容等同于:

cp * test-dir

我在做什么错了?

3 个答案:

答案 0 :(得分:1)

您正在将字符串“ dir.txt”提供给不接受标准输入的程序。

您正在寻找以下语法:

cp * "$(<dir.txt)"

$()在括号内运行该命令,并将其结果替换为其在命令行中的位置。 <是读取文件的快捷方式(cat也可以使用)。引号是为了避免空格问题。

答案 1 :(得分:0)

从文件填充变量

variable=$( cat /path/to/file.ext )

可以用编写:

variable=$( < /path/to/file.ext )

这避免了对/bin/cat命令的无用派生。这是功能。

但是您可以使用

read variable < /path/to/file.ext

我喜欢这个,因为它非常易读且功能强大:

read uptime idletime < /proc/uptime

将通过解析$uptime内核条目来填充两个变量$idletime/proc/uptime

避免有关目录不存在的错误

防止复制到不存在的目录:

read dir < test-dir
if [ -d "$dir" ] ;then
    cp -t "$dir" *
fi

-t的{​​{1}}参数表示 cp

或创建不存在的目录

target-directory

如果目录已经存在,其中dir=$(<test-dir) mkdir -p "$dir" cp -t "$dir" * 的{​​{1}}参数将跳过错误。

答案 2 :(得分:0)

您可以将文件的内容获取到变量:

sizeof p /sizeof *p

结果:

p