web-dev-qa-db-ja.com

.bashrcにこの行があるため、bashの起動が遅くなります。何が原因でしょうか?

私の_.bashrc_ファイルには、この効果への行が含まれています:

_alias prog="/path/to/script.sh $(find $(pwd) -name prog)"
_

この行をコメントアウトすると、新しいターミナルを開くと、ほぼ即座にBashが起動します。この行では、カーソルが表示されるまでに4〜5秒の遅延があります。

ネストされたコマンド$(pwd)などを削除すると、再び高速化されます。なぜこうなった?ネストされたコマンドを引き続き使用できますか?

19
BBales

コマンド置換は二重引用符で囲まれているため、コマンドが定義されたときに評価されます。これにより、findがハードディスクの内容を調べ、.bashrc が走っています。

対照的に、あなたはそれが使用時に評価されることを望んでいるように見えます。その場合は、単一引用符を使用します。

alias prog='/path/to/script.sh $(find "$(pwd)" -name prog)'

見つかったファイルの名前に空白が含まれている場合、このエイリアスは失敗することに注意してください。それを避けるには:

alias prog='find . -name prog -exec /path/to/script.sh {} +'

この後者の形式は、あらゆる種類のファイル名で確実に機能します。

45
John1024