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
Bash 如何在单独的目录中运行文件?猛击_Bash_Shell - Fatal编程技术网

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

快速提问,如何使用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.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;counter
pushd
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