web-dev-qa-db-ja.com

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

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

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

(ストレートアップは使えませんdnf updateinfo infoのため https://bugzilla.redhat.com/show_bug.cgi?id=1405191

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

Bashがエイリアスの解析と検証を試みないようにする方法はありますか?それともそれだけですか?

8
iLikeDirt

私の最善の推測は、エイリアス定義の前後に一重引用符を使用する必要があることです。

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

より良い説明はこれにあります nix SEの質問

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

編集:前述のドンキホーテのように、カット引数を二重引用符に置き換えることを忘れないでください。

9
hyph

bashは引用符で囲まれた文字列を解釈し、その解釈は埋め込まれたdnf check-updateコマンドを実行します。この実行は、エイリアスを作成しているメインのdnf updateinfoコマンドではなく、エイリアス定義中に時間がかかるものです。 sleepに基づいて考案された例を試して、alias自体に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引数を二重引用符に置き換えることを忘れないでください。

9
quixotic