bashに特定のエイリアスの解析と検証を停止させることはできますか?


8

私はFedora 25を使用しており、bashプロファイルに次のエイリアスを追加しています。

alias releasenotes="dnf updateinfo --refresh info `dnf check-update | cut -d '.' -f 1 | xargs` | less"

https://bugzilla.redhat.com/show_bug.cgi?id=1405191のdnf updateinfo infoため、ストレートアップを使用できません)

私のエイリアスは機能しますが、コマンドの実行には約10秒かかります。また、bashはプロファイルが読み込まれたときにすべてのエイリアスを解析および検証するため、新しいシェルを作成すると10秒のハングが発生します。これは迷惑です。

bashがエイリアスを解析して検証しないようにする方法はありますか?それだけですか?

回答:


9

私の推測では、エイリアスの定義は一重引用符で囲む必要があります。

二重引用符を使用する場合、シェル変数はエイリアスの定義段階(解析と検証で述べたように)とバッククォートまたは$(command)のようなシェル置換でコンテンツに置き換えられることを知っています。

より良い説明は、このUnix SEの質問にあります!

それでもプロンプトの読み込みが速くならない場合は、エイリアスの代わりにシェル関数を定義します。

編集:言及されたquixoticのような二重引用符にカット引数を交換することを忘れないでください。


やった!あなたが最初に答えたので、あなたは信用を得ます。
iLikeDirt 2017年

9

bash引用符で囲まれた文字列を解釈していますdnf check-update。その解釈により、埋め込まれたコマンドが実行されます。この実行は、エイリアスの定義中に時間がかかるものであり、エイリアスするメインdnf updateinfoコマンドではありません。に基づいて考案された例を試してみてsleepaliasそれ自体が5秒かかることに注意してください。

alias sleep5="echo 'wake' ; `sleep 5` ; echo 'done'"

解釈を避けるために単一引用符を使用します。

alias releasenotes='dnf updateinfo --refresh info `dnf check-update | cut -d "." -f 1 | xargs` | less'

cut引数を二重引用符に置き換えることを忘れないでください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.