Bashスクリプトで「interactive-comments」オプションを使用する

Bashスクリプトで「interactive-comments」オプションを使用する

非対話型bashスクリプトからコメントをオフにできるかどうか疑問に思います。

「interactive_comments」または「interactive-comments」の使用、オン、オフは、非対話型シェルには影響しませんsetshopt

なぜこれが起こるのですか?私が逃したものは何ですか?

ベストアンサー1

私はこの(対話型コメント)オプションを使用して対話型シェルを取得したいと思います。

推測するのではなく、ドキュメントを読んでください。

設定されている場合、次に始まる単語を許可すると、その#単語と行の残りのすべての文字がインタラクティブシェルで無視されます。

このオプションをオンにしても、シェルはインタラクティブに作成されません。シェルが対話型の場合にコメントを有効にするかどうかを制御します#。シェルがインタラクティブでない場合は効果はありません。

返品、

このオプションはデフォルトで有効になっています。

したがって、オンにしても効果はありません。

そして録音する方法はオンとオフのshopt -s interactive_comments方法shopt -u interactive_commentsがあります。ただし、set -o interactive-commentsandset +o interactive-commentsは(文書化されていない)代替手段です。


対話型シェルで始まった場合にのみ、対話型シェルを取得できます。非対話型シェルを対話型にする方法はありません。シェルが対話型かどうかは、コマンドラインと端末で実行されているかどうかによって異なります。

  • options を使用すると、-ibash は対話型で開始されます。
  • スクリプトファイル名(または)を-i使用または使用しないで、bashは非対話型で始まります。-cbash -c 'some command'bash path/to/script
  • -iあるいは、スクリプトファイル名がない-c場合、bashは標準入力と標準エラーの両方が端末の場合は対話型で始まり、そうでなければ非対話型で始まります。

interactive_commentsスクリプトファイルとスクリプト内の説明は、オプションの状態に関係なく-c常に認識されます。#コメントが単語の先頭で始まらない唯一のケースは、シェルが対話型であり、このinteractive_commentsオプションがオフになっており、標準入力から読み取る場合です。

この試みscript.sh

# a comment
shopt interactive_comments
set +o interactive-comments
shopt interactive_comments
# another comment

実行履歴:

bash-5.0$ # a comment
bash-5.0$ shopt interactive_comments
interactive_comments    on
bash-5.0$ set +o interactive-comments
bash-5.0$ shopt interactive_comments
interactive_comments    off
bash-5.0$ # another comment
bash: #: command not found
bash-5.0$ exit

おすすめ記事