[解決済み] Bashスクリプトをデバッグするにはどうしたらいいですか?[クローズド]
質問
Bashスクリプトをデバッグする方法はありますか?
例えば、"1行目の呼び出し"、"2行目の呼び出し"など、一種の実行ログを表示するようなものです。
どのように解決するのですか?
sh -x script [arg1 ...]
bash -x script [arg1 ...]
これらは、何が実行されたかを追跡することができます。 (回答の最後のほうにある「明確化」も参照してください)。
時には、スクリプト内でデバッグを制御する必要があります。 その場合、以下のように チートス 思い出す を、使ってください。
set -x
これでデバッグがONになります。 その後で再びオフにすることができます。
set +x
(を解析することで、現在のトレース状態を知ることができます)。
$-
の場合、現在のフラグは
x
.)
また、シェルでは一般的にオプションとして '
-n
は「実行しない」、'
-v
これらを組み合わせて使うことで、シェルがスクリプトを実行できると考えているかどうかを確認することができます。
という議論がありますが、'
-x
のオプションは他のシェルとは異なります(コメント参照)。 その
Bashマニュアル
にはこう書かれています。
-
-x
簡単なコマンドのトレースを表示します。
for
コマンドを使用します。case
コマンドを使用します。select
コマンド、および算術for
コマンドとその引数、または関連する単語リストを展開した後、実行する。の値はPS4
変数が展開され、その結果がコマンドと展開された引数の前に表示されます。
それだけでは、全く異なる挙動を示しているようには見えません。 他に関連する言及がないのは、'
-x
がマニュアルに記載されています。 起動シーケンスの違いについては記載されていません。
明確化
: 典型的なLinuxボックスのようなシステムで、'
/bin/sh
' へのシンボリックリンクです。
/bin/bash
(またはBashの実行ファイルがある場所)、2つのコマンドラインは、実行トレースをオンにしてスクリプトを実行するのと同等の効果を達成することができます。 他のシステム(例えば、Solarisや、Linuxのいくつかの最新バージョンなど)では
/bin/sh
はBashではないので、この2つのコマンドラインは(少し)異なる結果をもたらすでしょう。 最も注目すべきは、'
/bin/sh
は、Bashが全く認識しない構成要素によって混乱させられるでしょう。 (Solarisでは
/bin/sh
最近のLinuxでは、より小さく、より厳密にPOSIXのみのシェルであるDashの場合もあります)。 このような名前で呼び出された場合、「shebang」行('
#!/bin/bash
' 対
'#!/bin/sh
') をファイルの先頭に置いても、その内容の解釈には何の影響もありません。
Bashのマニュアルには
BashのPOSIXモード
として起動されたBash」の違いについて、詳細に説明しています。
sh
と「Bash invoked as
bash
'.
(Bash)シェルスクリプトをデバッグする場合、shebang行で指定されたシェルを使用することは賢明であり、正気であり、必要でさえあります。
-x
オプションで指定します。 そうしないと、デバッグ時とスクリプト実行時で異なる動作になる可能性があります(なります?)。
関連
-
[解決済み] Bashスクリプトで引数を反復処理する方法
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで文字列をデリミターで分割するには?
-
[解決済み] Bashでコマンドの出力に変数を設定するにはどうすればよいですか?
-
[解決済み】bashで1つのコマンドでシェル変数にデフォルト値を割り当てる。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] OS X で 'find' コマンドを使用して 'sed' を使用するとエラーが発生する。"無効なコマンドコードです。"
-
[解決済み] zip警告 - 名前が一致しない
-
[解決済み] cmake execute_process COMMAND [重複]。
-
[解決済み] awk で行を飛ばすにはどうしたらいいですか?
-
[解決済み] Bashを使ってプログレスインジケータを表示する [重複]。
-
[解決済み] Bashで最新のディレクトリを変数に取得する
-
[解決済み] シェルスクリプトでこのエラーを解決するにはどうしたらよいでしょうか。"読み取り。Illegal option -t "というエラーはどうすれば解決できますか?
-
[解決済み] Bashスクリプトのset -o pipefailの意味を教えてください。
-
[解決済み] Bashスクリプトの'''抜け'''がある] [クローズド]
-
[解決済み] Bashシェルスクリプトの起動を遅くするプロファイルはどうすればいいですか?