2

CentOS で、さまざまなエコー エスケープ シーケンスをテストする bash スクリプトを作成しようとしています。ただし、プログラムを実行すると

./test.sh

次のエラー メッセージが表示され続けます。

悪い解釈: そのようなファイルやディレクトリはありません

スクリプトは次のとおりです。

#! /bin/bash

# Test echo escape sequences

input=$1

case $input in
   a ) echo -e "\a" testing \a;;
   b ) echo -e "\b" testing \b;;
   c ) echo -e "\c" testing \c;;
   * ) echo Incorrect input
   exit 1;;
esac

どこで私は間違えましたか?

編集: Windows XP ホストの VirtualBox で CentOS Minimal ゲストを実行しています

編集2:

 #! bin/bash

私のスクリプトにはありましたが、そうではありませんでした

#! /bin/bash

に変更したところ

 #! /bin/bash

プログラム ./test.sh a を実行すると、「a」が表示されるだけです

4

2 に答える 2

4

[編集] 元の投稿によると、これは通常 DOS LINE ENDINGS が原因です。

CR/LF DOS 行末の CR は、スクリプトの実行に使用する必要があるシェルの一部としてインタープリターによって認識されています。

そのため、存在しない /bin/bash(CR) を読み込もうとするため、「bad interpreter」と表示されます。

これを修正する簡単な方法の 1 つは、スクリプトの内容をクリップボードにコピーしてから、次のようにすることです。

cat > test.sh (クリップボードを貼り付け) (ENTER を押す) (CTRL-D を押す)

これにより、誤った行末が取り除かれます (他の方法もありますが、これは非常に簡単でわかりやすい解決策です。


「悪いインタープリター」の問題が解決されると、スクリプト内の別の構文エラーは、おそらく「\a」を意図しているときに「\a」を使用することです。


[編集] 私は今あなたが何を意味するかを理解していると思います. 代わりにこれを試してください:

echo -e '\a' テスト '\\'a

于 2012-08-17T01:44:53.777 に答える
2

次のようなものでスクリプトを実行可能にしましたか

   chmod 755 test.sh

追加した

問題の一部は、\a=カーソルを上に\b=カーソルを下に\c=カーソルを前進させるという意味で使用しているエスケープ シーケンスにあるのだろうかと思います。

または、\a=SOH 見出しの開始 \b=テキストの STX 開始または \c=テキストの ETX 終了としても解釈されます

于 2012-08-17T01:34:20.580 に答える