linux - 将字符串传递给脚本

标签 linux bash

我有一个脚本,download,它接受一个字符串并检查文件是否具有该字符串的文件名。如果没有,则会下载它。所有文件名都在一个文件中。

此命令不起作用:

cat filenames | ./download

下载源码:

filename=$1
if [ ! -f $1 ];
then
        wget -q http://www.example.com/nature/life/${filename}.rdf
fi

示例文件名文件:

file1
file2
file3
file4

如何将 cat 的命令输出传递到下载脚本?

最佳答案

在您的脚本中,$1 是命令行上的位置参数。 ./download somefile 可以,但是 cat filename | ./download 将数据流式传输到 download 中,您可以忽略它。

您应该阅读advanced bash scripting guide ,这将为您了解 bash 脚本的工作原理奠定良好的基础。要解决此问题,请将命令更改为:

cat filename | xargs -n 1 ./download

这将为列表中的每个文件名运行./download。但是,文件名中可能包含空格或其他特殊字符,这会破坏您的脚本。您应该研究替代方法来避免这些问题。

具体来说,使用 while loop读取您的文件。如果文件名正确输入到文件中,这会在每一行中正确转义文件名。这样,您就可以避免 cat 使用文件名时遇到的问题,例如:fi/\nle

关于linux - 将字符串传递给脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15978852/

相关文章:

linux - Docker 无法使用代理连接到互联网

c - “unshare”在 C api 中无法正常工作

linux - 如何禁用 Apache 中的目录列表?

linux - 巴什脚本 : handling paths with escaped spaces

Linux,Bash 在生成的进程结束后在脚本中执行命令

windows - MINGW Git bash 中的 Maven 错误 : Could not find or load main class org. codehaus.plexus.classworlds.launcher.Launcher

linux - 如何检查重复文件,如果找到重复文件则追加文件名?

linux - libc 和 libdl 中的 dlopen

bash - 在 bash 中混淆存储的密码

linux - 反引号 `cat filename` 失败,文件内容是几个命令