コマンドはシェルで実行されますが、スクリプトでは実行されません:ディレクトリが見つかりませんエラー

コマンドはシェルで実行されますが、スクリプトでは実行されません:ディレクトリが見つかりませんエラー

スクリプトで実行されないいくつかのコマンドがあります。

ファイル名の箇条書きリストを作成し、各ファイルの列をアルファベット順に並べ替え、2番目の列に一致する3番目の列を取得して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ループのみが実行されますが、2番目のループではまだ問題があります。

誤って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ませんでした。

2番目の更新:この投稿を貼り付けても、スクリプトはまだ期待どおりに実行されません。ホームブレイクを更新して別のコンピュータを試してみましたが、運がありませんでした。何が起こりますか? ? ?

答え1

ファイル名だけが必要です。これは、スクリプトが「現在のディレクトリ」(入力したディレクトリ)からファイルを探していることを意味しますcd。使用したいファイルと同じディレクトリにありますか?

絶対ファイル名を使用する:/somedir/someotherdir/filename- この方法では、常に既知の場所でファイルを見つけることができます。

答え2

あなたの質問に提供された問題の説明を生成する方法は2つだけです。

  1. スクリプトを編集しました。実行中。解決策:しないでください
  2. ファイルシステムの破損は、スクリプトファイルが他の作成者の影響を受けたことを意味します。回避策:ファイルシステムのチェックを強制します。

関連情報