chmod +x .. 파일을 열 수 없습니다. [닫기]

chmod +x .. 파일을 열 수 없습니다. [닫기]

터미널에서 쉘 스크립트를 실행하면 어떤 이유로 작동하지 않습니다. 내 파일 이름이 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

어떻게 해야 합니까? 어떤 제안/제안이라도 주시면 감사하겠습니다.


쉘 스크립트를 실행하려고 시도했지만 작동하지 않습니다. "해당 파일이나 디렉토리가 없습니다"라는 메시지가 나타납니다. 내 결과의 스크린샷을 첨부했으며 조언이나 도움을 주시면 정말 감사하겠습니다. 많은 감사를 드립니다.

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에 대한 전체 힙 경로가 있습니다. 문서.

이것은 내 쉘 스크립트입니다.

# 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`

변수 앞에 붙이면 $변수의 값이 대체됩니다.

관련 정보