在linux中使用*命令运行文件
假设我希望在一个目录中运行所有脚本。如果我这样做。/*.sh,它们将按哪个顺序运行 目录: 1.sh 2.sh在linux中使用*命令运行文件,linux,bash,scripting,Linux,Bash,Scripting,假设我希望在一个目录中运行所有脚本。如果我这样做。/*.sh,它们将按哪个顺序运行 目录: 1.sh 2.sh 3.sh它们按字母顺序排序。从: 在单词拆分之后,除非设置了-f选项(请参见set-Builtin),否则Bash将扫描每个单词中的字符“*”、“?”和“[”。如果出现其中一个字符,则该单词将被视为一个模式,并替换为与该模式匹配的按字母顺序排序的文件名列表 但是,为了按预期运行它们,您需要阅读@chepners答案(谢谢!我必须承认,我没有预料到)要运行所有脚本,您必须分别运行它们:
3.sh它们按字母顺序排序。从: 在单词拆分之后,除非设置了-f选项(请参见set-Builtin),否则Bash将扫描每个单词中的字符“*”、“?”和“[”。如果出现其中一个字符,则该单词将被视为一个模式,并替换为与该模式匹配的按字母顺序排序的文件名列表
但是,为了按预期运行它们,您需要阅读@chepners答案(谢谢!我必须承认,我没有预料到)要运行所有脚本,您必须分别运行它们:
for f in ./*; do
"$f"
done
该模式将生成按字母顺序排序的脚本列表,其中“字母顺序”由当前语言环境定义
您的尝试:
./*
将扩展为匹配文件的列表,然后shell将其视为单个命令。将执行第一个脚本,并将剩余的脚本名称作为参数传递给第一个脚本。您尝试过吗?结果如何?似乎是一个“超级用户”问题….@JimGarrison仅尝试一下,在这里是不够的。观察到输出结果:ht可能会受到一些未知设置的影响。这绝对不是一个
-2
问题。只是尝试一些东西,并推断这将在所有其他机器上工作,这是非常糟糕的做法。35k的注释很差。但35k的含义是什么…:)请注意,这不会运行所有脚本。它将运行第一个脚本,其名称为正在将脚本作为参数传递给第一个脚本。现在您知道了默认顺序,如果您想强制脚本以另一个顺序运行,可以尝试使用ls排序的一些技巧。例如,按字母顺序向后排序:“ls*.sh-r | xargs-I%bash%”或按创建时间:“ls*.sh-t | xargs-I%bash%”回答得好!没想到会这样。