我有几个文件夹(每个月一个),每个文件夹都有一个 bash 脚本savetodatabase.sh
。我想一个接一个地运行它们,所以我创建了一个名为的脚本,saveall.sh
其中包含以下代码:
#!/bin/bash
sh 2014/07-Jul/savetodatabase.sh
sh 2014/08-Aug/savetodatabase.sh
sh 2014/09-Sep/savetodatabase.sh
sh 2014/10-Oct/savetodatabase.sh
sh 2014/11-Nov/savetodatabase.sh
sh 2014/12-Dec/savetodatabase.sh
但是,这将运行 saveall 所在文件夹中的脚本,而不是不同脚本所在的文件夹中的脚本。我该如何解决这个问题,以便单个脚本可以运行所有“本地”脚本?
答案1
目前,您实际上是在运行 saveall 目录中的脚本。如果您想运行其文件夹中的每个脚本(我假设您可能有一些输出正在记录到 pwd?),那么最简单的方法可能是 cd 进入每个文件夹,然后运行单独的 sh 脚本。因此,类似于:
#!/bin/bash
cd base_dir/2014/07-Jul
sh savetodatabase.sh
cd base_dir/2014/08-Aug
sh savetodatabase.sh
ETC。
对“base_dir”的引用表示使用目录的完整路径。
或者,完全取决于 savetodatabase 脚本的差异和复杂性,您可以将这些脚本中的过程合并为一个脚本,并内置一些逻辑,允许根据年份/月份进行变化。如果只是一些变量更改,您可以有一个 txt“配置”文件,脚本读取并循环遍历该文件(或使用其他类似的方法来运行这些变化)以获得不同的输出。
一切都取决于哪种管理方法最适合您:)
答案2
这将运行savetodatabase.sh
2014 目录及其子目录下的所有可执行文件,并且每个可执行文件将在其目录中运行。
#!/usr/bin/env bash
find 2014 -type f -executable -name savetodatabase.sh | while read script
do
cd "$(dirname "$script")"
sh "$(basename "$script")"
cd -
done
当然,这假设这些文件被标记为可执行文件。