터미널에서 쉘 스크립트를 실행하면 어떤 이유로 작동하지 않습니다. 내 파일 이름이 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
스크립트가 필요하지 않습니다.sh
bash
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`
변수 앞에 붙이면 $
변수의 값이 대체됩니다.