Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在linux中使用*命令运行文件_Linux_Bash_Scripting - Fatal编程技术网

在linux中使用*命令运行文件

在linux中使用*命令运行文件,linux,bash,scripting,Linux,Bash,Scripting,假设我希望在一个目录中运行所有脚本。如果我这样做。/*.sh,它们将按哪个顺序运行 目录: 1.sh 2.sh 3.sh它们按字母顺序排序。从: 在单词拆分之后,除非设置了-f选项(请参见set-Builtin),否则Bash将扫描每个单词中的字符“*”、“?”和“[”。如果出现其中一个字符,则该单词将被视为一个模式,并替换为与该模式匹配的按字母顺序排序的文件名列表 但是,为了按预期运行它们,您需要阅读@chepners答案(谢谢!我必须承认,我没有预料到)要运行所有脚本,您必须分别运行它们:

假设我希望在一个目录中运行所有脚本。如果我这样做。/*.sh,它们将按哪个顺序运行

目录: 1.sh 2.sh
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%”回答得好!没想到会这样。