명령은 셸에서 실행되지만 스크립트에서는 실행되지 않습니다: 디렉터리를 찾을 수 없음 오류

명령은 셸에서 실행되지만 스크립트에서는 실행되지 않습니다: 디렉터리를 찾을 수 없음 오류

스크립트로 실행되지 않는 일부 명령이 있습니다.

파일 이름의 글머리 기호 목록을 만든 다음 각 파일의 열을 알파벳순으로 정렬하고 두 번째 열과 일치하는 세 번째 열을 가져와 HTML 마크업에 넣어야 합니다. 대부분의 경우 제대로 작동하지만 .csv 파일 확장자를 성공적으로 제거할 수는 없습니다.

스크립트를 실행할 때마다 반복적으로 line 10 p: No such file or directory found반환됩니다 line 21: /a No such file or directory found.

sort업데이트: 내 컴퓨터에 오류가 있는 것 같습니다. 정렬 주석만 사용하여 간단한 쉘 스크립트를 실행했지만 오류가 발생했습니다 no such file or directory. 이미 내 목록에 있지만 sudoers뭔가 잘못하고 있는 것 같습니다. 일부 사람들이 스크립트를 실행하는 데 문제가 없다고 언급한 이유를 이해할 수 없습니다.

#!/bin/bash

for file in *.csv; do
name=${file%.csv}
 echo "<li><a href='$file'>$file</a></li>" >> final.html
done
for file in *.csv; do
 name=${file%.csv}
 sort -t"," -k2 "$file" |
 awk -vfile="$name" -F"," '
 BEGIN {
 printf "<h3 id=\"%s\">%s</h3>\n", file, file
 printf "<ul class=\"no-bullet\">\n"
 }
 {
 printf "<li>%s (%s)</li>\n", $2, $3
 }
 END {
 printf "</ul>\n"
 printf "<p id=\"%s\" class=\"text-smaller block-looser\">[<a href=\"#top\">Return to Top</a>]</p>\n", file
 }
 ' >> final.html
done

이것을 실행했을 때 bash -x myscript.sh결국 반환되기 시작했다는 것을 알았습니다.

 BEGIN {
 printf "<h3 id=\"%s\">%s</h3>\n", file, file
 printf "<ul class=\"no-bullet\">\n"
 }
 {
+ sort -t, -k2 file.csv
 printf "<li>%s (%s)</li>\n", $2, $3
 }
 END {
 printf "</ul>\n"
 printf ' 'id="%s"' 'class="text-smaller' 'block-looser"'
myscript.sh: line 9: p: No such file or directory
+ href='"#top"'
+ to Top
myscript.sh: line 21: /a: No such file or directory

특히 .csv 파일과 동일한 디렉터리에서 실행할 때 셸에서 실행하는 것과 스크립트에서 실행하는 것의 차이점을 이해하지 못합니다. 명령줄에 명령을 붙여 넣을 때는 이러한 문제가 발생하지 않습니다.

업데이트: 디렉터리에서 코드를 실행하면 첫 번째 for 루프만 실행되지만 두 번째 루프에서는 여전히 문제가 있습니다.

실수로 10행과 21행 대신 10행과 22행을 썼고, 이를 반영하여 게시물을 업데이트했습니다. 무슨 일이 일어나고 있는지 디버깅/파싱하려고 할 때 어딘가에 추가 줄이 있을 수 있습니다.

다음은 이 셸 스크립트를 사용하여 실행하려는 샘플 .csv 파일입니다.

주소록.csv

ID,Name,State
1,John,NY
2,Rachel,SC

이 코드의 예상 출력:


<li><a href='Contacts'> Contacts</a></li>

<h3 id='Contacts'> Contacts </h3>

<ul class="no-bullet">

<li>John (NY) </li>
<li>Rachel (SC) </li>
</ul>

<p id='Contacts' class="text-smaller">[<a href="#top">Return to top</a>]</p>

저도 사용해 보았 printf "<p으나 printf '<p소용이 없었습니다.

두 번째 업데이트: 이 게시물을 붙여넣어도 스크립트가 여전히 예상대로 실행되지 않습니다. 홈브류를 업데이트하고 다른 컴퓨터를 사용해 보았지만 운이 없었습니다. 무슨 일이 일어날 수 있나요? ? ?

답변1

파일 이름만 있으면 됩니다. 이는 스크립트가 "현재 디렉터리"(입력한 디렉터리)에서 파일을 찾고 있음을 의미합니다 cd. 사용하려는 파일과 동일한 디렉토리에 있습니까?

절대 파일 이름 사용: /somedir/someotherdir/filename- 이 방법을 사용하면 항상 알려진 위치에서 파일을 찾을 수 있습니다.

답변2

귀하의 질문에 제공된 문제 설명을 발생시키는 방법은 두 가지뿐입니다.

  1. 스크립트를 편집했습니다.실행되는 동안. 해결책: 하지 마세요
  2. 파일 시스템 손상은 스크립트 파일이 다른 작성자의 영향을 받았다는 것을 의미합니다. 해결 방법: 파일 시스템 검사를 강제로 수행합니다.

관련 정보