스크립트로 실행되지 않는 일부 명령이 있습니다.
파일 이름의 글머리 기호 목록을 만든 다음 각 파일의 열을 알파벳순으로 정렬하고 두 번째 열과 일치하는 세 번째 열을 가져와 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
귀하의 질문에 제공된 문제 설명을 발생시키는 방법은 두 가지뿐입니다.
- 스크립트를 편집했습니다.실행되는 동안. 해결책: 하지 마세요
- 파일 시스템 손상은 스크립트 파일이 다른 작성자의 영향을 받았다는 것을 의미합니다. 해결 방법: 파일 시스템 검사를 강제로 수행합니다.