2017-08-13 6 views
1

コマンドでテキストファイルを解析する際にコマンドが見つかりません:bashの - 私は別のコマンドで構成テキストファイルを持っている

set +e; false; echo $? 
(false;   echo foo); echo \ $? 
for i in .; do (false; echo foo); echo \ 1:$?; done; echo \ 2:$? 

のように。

set -eを使用してbashの子プロセスでこれらのコマンドを全体としてテストしたい場合は、親のbashプロセスからエラーコードをチェックして、エラーで終了したかどうかを確認してください。私はより単純なコマンド(上記の最初のコマンドなど)を処理する方法についていません。私は運がなくて、いくつかのバリエーションを試してみた

mapfile file < "$dir"/errorData 
bash -c "${file[0]}" 
echo $? 

戻り

bash: set +e: command not found 
bash: false: command not found 
bash: echo 127: command not found 

:ここに私の最近の試みの一つです。 bash -c \'"${file[1]}"\'を使用すると、コマンドが見つからないというエラーメッセージが表示され、上記の3つの文字列が1つの長い文字列に結合されます。もちろん、ファイルのコマンドを厳密な引用符で囲み、対話シェルのbashに直接入力するだけで問題ありません。

編集:私はシェルがリファレンスマニュアルに違反しているように見える方法で自分のテキストを解析していることを見つけた人にとってはbash 4.4.12(1)

+0

これらのエラーはBash v4.3.48で再現できません。すべてうまく動作します。 – randomir

+0

(-c) "$ {file [0]}"を実行してもよろしいですか? "$ {file [0]}"? – yacc

+0

@yacc -cを指定しないと、bashがファイルまたはディレクトリを要求しているため、コマンドが失敗します。 – LumpyGrads

答えて

1

を使用している、任意のコピーされた入力データを確認してください目に見えない制御文字。例えば。私は、実行されるコマンドを含む入力ファイル内に、単純な空白のように見えるものの代わりに、改行されないスペースを見つけました。これは、Webページからエディタまたはコマンドラインにコピーするときに特によく使用されます。 bashは、改行しないスペース(Unicode標準のU + 0020)ではなく、空白、タブ、および改行をトークン化するために使用します。 16進エディタhexfiendは、同様の問題のトラブルシューティングに役立ちます。

+0

貼り付けたデータに改行しないスペースが含まれていません(U + 0020は通常のスペース、U + 00A0は改行しないスペースです)。これは、テストケースを常に新しいディレクトリにコピーして実行することをお勧めします。 –

+0

ここに表示されているデータは、数十行のサンプルであったので入力しました。実際に使用していたデータを貼り付けました。 – LumpyGrads

関連する問題