chmod + x ..文件无法打开

chmod + x ..文件无法打开

当我在终端上运行 shell 脚本时,由于某种原因它无法工作。假设我的文件名是 Final_exam.sh,下面是我的命令。

chmod 755 final_exam.sh
sh final_exam.sh

它说

ls: cannot access 'PATH_TO_FILES/A.csv': No such file or directory
ls: cannot access 'PATH_TO_FILES/B.csv': No such file or directory

我应该怎么办?任何建议/建议将不胜感激。


我一直在尝试运行 shell 脚本,但它不起作用,说“没有这样的文件或目录”。我附上了我的结果的屏幕截图,非常感谢您的任何建议/帮助。万分感谢。

stats@stats-VirtualBox:~/Desktop$ ls 
FINAL_Project  __MACOSX
stats@stats-VirtualBox:~/Desktop$ cd FINAL_Project
stats@stats-VirtualBox:~/Desktop/FINAL_Project$ cd final_exam
stats@stats-VirtualBox:~/Desktop/FINAL_Project/final_exam$ pwd
/home/stats/Desktop/FINAL_Project/final_exam
stats@stats-VirtualBox:~/Desktop/FINAL_Project/final_exam$ ls
Domains_FormB.csv  final_project.sh  Numeric1.awk     WidetoLong.r
Domains_FormV.csv  FirstConvert.r    Numeric2.awk
Final_Output       FormV.csv         SecondConvert.r
stats@stats-VirtualBox:~/Desktop/FINAL_Project/final_exam$ 

所以,基本上,^^ 具有 csv 的完整堆路径。文件。

这是我的 shell 脚本。

# 9 Path to the folder with the data
#PATH_TO_FILES=../.
PATH_TO_FILES=home/Desktop/FINAL_Project/final_exam

sed -i 's/^M//g' FirstConvert.r
sed -i 's/^M//g' SecondConvert.r
sed -i 's/^M//g' WidetoLong.r

# 1 Remove any files that had been created in previous attempts
rm -f Final_Output
touch Final_Output

for file in `ls PATH_TO_FILES/Form?.csv`
do
    fname=`echo $file | sed 's/.*\///g' | sed 's/\.csv//g'`
# 2 Separate the answer key from the student answers
    grep "KEY" $file > OUT_Answers_$fname
    grep -v "KEY" $file > OUT_StudentAnswers_$fname

# 3 Use the R script provided that matches the student answers to the answer key
    Rscript FirstConvert.r OUT_StudentAnswers_$fname OUT_Answers_$fname OUT_FirstConvert_$fname
# 4 Use the R script provided which changes the R object from wide to long format
    Rscript WidetoLong.r OUT_FirstConvert_$fname OUT_WidetoLong_$fname

    sed -i 's/\"//g' OUT_WidetoLong_$fname 

 
# 5 Format the resulting question numbers from the file in step 4
    awk -f Numeric1.awk OUT_WidetoLong_$fname > OUT_Questions_$fname 
done

for file in `ls PATH_TO_FILES/Domains_Form?.csv`
do
    fname=`echo $file | sed 's/.*\///g' | sed 's/Domains_//g' | sed 's/\.csv//g'`
# 6 Select only the domain number and question number from the domains file and remove the header
    tail -n +2 $file | cut -d',' -f3,4 | sed 's/,/ /g' | sed 's/\r//g' > OUT_Domain_tmp_$fname
# 7 Modify the script from step 5 to format the question numbers in the file you created in step 6 to be sorted correctly
    awk -f Numeric2.awk OUT_Domain_tmp_$fname > OUT_Domain_$fname
# 8 Join your student's answer file to the domains on/by question number
    join -1 3 -2 2 -o 1.1,1.2,1.3,2.1,1.4 OUT_Questions_$fname OUT_Domain_$fname >> Final_Output
done

# Clean intermediate files
rm -f OUT_*

在此输入图像描述

答案1

阅读所有评论后没有找到它,假设您的 for 循环包括$

我想说PATH_TO_FILES=home/Desktop/FINAL_Project/final_exam缺少一个领先的/.

您的脚本可能正在搜索<current dir>home

您可以通过在脚本开头“回显”变量来找到答案:

...
echo $PATH_TO_FILES
...

另外,由于它在问题的标题中,因此当您使用或像这样运行脚本时,您不需要chmod脚本shbash

bash my_script.sh

事实上,您可以完全省略 shebang。

希望有帮助

答案2

该错误消息不是关于final_project.sh.它确实打开并运行,并且我认为脚本正在调用错误消息ls:它抱怨两个参数与它可以找到的任何文件不对应。

粘贴脚本的内容而不是屏幕截图(使用{}工具栏中的按钮将其格式化为代码),以及这些 .csv 文件的完整路径。我们也许能够找出它在哪里寻找这些文件。

答案3

正如所指出的阿里尔公司,执行时脚本内容抛出错误,您可以修改上面的脚本for循环来解决问题。

for file in `ls PATH_TO_FILES/Form?.csv转换成

for file in `ls $PATH_TO_FILES/Form?.csv`

变量前添加$将会替换变量的值。

相关内容