技术求助:如何在Bash脚本中运行其他目录下的文件?
解决Bash脚本中运行其他目录文件的问题
首先,先修正你脚本开头的shebang错误——你写了#!/bin/#!/usr/bin/env bash,这会导致脚本无法正确解析,应该改成:
#!/usr/bin/env bash
接下来针对你要在循环中运行其他目录文件的需求,分两种常见情况说明:
情况1:运行其他目录下的脚本文件
假设你要运行的是Assignment3_submission目录下的generate_all_predictions.bash(和你的当前脚本同级),你可以用相对路径或者绝对路径来调用它:
用相对路径(推荐,只要脚本在同级目录就生效)
在你的# MUST RUN THE FUNCTION HERE位置替换成:
# 运行同级目录下的generate_all_predictions.bash ./generate_all_predictions.bash
用绝对路径(更稳妥,不受当前工作目录影响)
如果不确定脚本执行时的工作目录,直接用绝对路径更可靠:
# 绝对路径调用脚本 /root/Assignment3_submission/generate_all_predictions.bash
情况2:运行某个自定义函数
如果# MUST RUN THE FUNCTION HERE指的是调用一个自定义函数(而不是脚本文件),你需要先确保该函数已被加载:
- 如果函数定义在另一个脚本文件里,先通过
source命令加载它:# 先加载包含目标函数的脚本 source /root/Assignment3_submission/path/to/your_function_script.sh # 然后调用函数 your_function_name - 如果函数定义在当前脚本里,直接在对应位置写函数名即可。
修改后的完整脚本示例
这里结合你的需求,给出修正后的完整脚本(假设要运行同级的generate_all_predictions.bash):
#!/usr/bin/env bash counter=0 while [ "$counter" -le 208 ] do # 给变量加引号,避免潜在的空格问题(好习惯) mv "$counter.txt" /root/Assignment3_submission/query # 运行同级目录下的脚本 ./generate_all_predictions.bash mv /root/Assignment3_submission/query/"$counter.txt" /root/Assignment3_submission/data ((counter++)) done
额外提示
- 如果你要运行的脚本不在当前脚本的同级目录,只需要调整路径即可,比如要运行
/root/other_dir/script.sh,直接写该绝对路径就行。 - 确保你要运行的脚本有可执行权限,如果没有,先执行
chmod +x /path/to/your_script.sh赋予权限。
内容的提问来源于stack exchange,提问作者JoshPark
相关产品推荐
相关产品推荐

