Bash 如何在单独的目录中运行文件?猛击
快速提问,如何使用bash脚本在另一个目录中运行文件 到目前为止,我已经:Bash 如何在单独的目录中运行文件?猛击,bash,shell,Bash,Shell,快速提问,如何使用bash脚本在另一个目录中运行文件 到目前为止,我已经: #!/bin/#!/usr/bin/env bash counter=0 while [ "$counter" -le 208 ] do mv $counter.txt /root/Assignment3_submission/query # MUST RUN THE FUNCTION HERE mv /root/Assignment3_submission/query/$counter
#!/bin/#!/usr/bin/env bash
counter=0
while [ "$counter" -le 208 ]
do
mv $counter.txt /root/Assignment3_submission/query
# MUST RUN THE FUNCTION HERE
mv /root/Assignment3_submission/query/$counter.txt
/root/Assignment3_submission/data
((counter++))
done
我的文件路径是:
Assignment3_submission
|
|--> data
| |
| L--> .txt files numbered 0-208
| L--> generate_all_predictions.bash
|
|--> query
|--> movie_recommender
当我在作业3提交中运行./movie\u recommender时,它工作得非常好。
此外,我的脚本(generate_all_predictions.bash)将所有文本文件从
数据可以完美地查询和返回
我只需要在位于/Assignment3\u submission/data的bash脚本中运行这个电影推荐程序文件
编辑:我试着用这一行来替换#必须在这里运行,结果出现了200多个seg故障
/root/Assignment3_submission/movie_recommender query/$counter.txt data/*
EDIT2:很明显我试着在错误的目录下运行。。但是谢谢大家的投入,真的学到了很多 您可以轻松使用
cd ..
execute stuff
cd -
或者更通用(也允许进一步嵌套):
在任何地方使用绝对地址:
/root/Assignment3_submission/movie_recommender /root/Assignment3_submission/query/$counter.txt /root/Assignment3_submission/data/*
您的脚本存在许多不相关的问题
- 如果文件位于
中,则表明您正在以/root/
用户的身份运行此文件。这是一个主要的禁忌。要么你根本不需要root权限(在这种情况下,作为普通用户运行将是一个非常小的改变),要么你需要学会将特权管理任务与系统的常规使用分开(在这种情况下,会有一点学习曲线,但最终你会感谢自己)root
- 硬编码路径使脚本无法重用。您应该重新设计它,使其工作,而不管您在哪个目录中,也不管它应该操作的数据文件在哪里。您可以让它接受一个path name参数,或者假设调用它的用户理解这个约定,就在当前工作目录中操作它
- 你的社邦路线很混乱。后面的东西是
应该是到解释器的绝对路径(或者,视情况而定,到像#
这样的程序,它为您计算到解释器的绝对路径)env
#!/bin/bash
test -d ./query && test -d ./data ||
{ echo "$0: ./query and ./data must exist" >&2
exit 1; }
for((counter=0; counter <= 208; ++counter))
do
mv ./data/"$counter.txt" ./query
./movie_recommender query/"$counter.txt" data/*
mv ./query/"$counter.txt" ./data
done
#/bin/bash
test-d./query&&test-d./data||
{echo“$0:./query和./data必须存在”>&2
退出1;}
for((counter=0;counterpushd
和popd
(或cd
和cd-
用于简单情况)是选项,但是,我发现使用子shell要容易得多:
(
cd /path/to/run/stuff/in
# stuff to do here
)
一旦子shell退出,主shell仍然位于原始位置。(这也意味着如果它被中断,工作目录不会更改)
对于此示例:
#!/bin/bash
counter=0
while [ "$counter" -le 208 ]
do
mv $counter.txt ~/Assignment3_submission/query
# Stuff to do in other PWD
(
cd ~"/Assignment3_submission/query"
tar czf ~/things_in_dir_using_relative_paths.tar.gz * # Sample command
)
mv ~/Assignment3_submission/query/$counter.txt
~/Assignment3_submission/data
((counter++))
done
发出chmod+xscriptfile
并以/path/to/scriptfile
的形式运行,将包含程序的目录添加到路径
,通常这是在启动文件中完成的,如.bash\u profile
,例如路径=$path:完整目录名
。顺便说一句,您的!
行肯定是错误的,得到200+seg.faults是您正在运行的程序中的一个bug,应该向开发人员报告。请参阅-t
mv
命令的参数:mv-t/path/to/target/dir path/to/files*。
感谢所有信息!
#!/bin/bash
counter=0
while [ "$counter" -le 208 ]
do
mv $counter.txt ~/Assignment3_submission/query
# Stuff to do in other PWD
(
cd ~"/Assignment3_submission/query"
tar czf ~/things_in_dir_using_relative_paths.tar.gz * # Sample command
)
mv ~/Assignment3_submission/query/$counter.txt
~/Assignment3_submission/data
((counter++))
done