.profiles/ディレクトリのファイルに基づいてエイリアスをロードしたいと思います。
for profile in ~/.profiles/*; do
for file in ~/.s1n7ax/$(basename $profile)/alias/*; do
include "$file"
done
done
ただし、内部にファイルがないと~/.s1n7ax/$(basename $profile)/alias/*
エラーが発生します。
/home/s1n7ax/.zshrc:117: no matches found: /home/s1n7ax/.s1n7ax/work/alias/*
SDTにエラーを出力せずにこの問題を正常に処理したいと思います。
答え1
デフォルトでは、zsh
シェルは一致しないファイル名ワイルドカードパターンを致命的なエラーとして扱います。 globが一致するものがないと予想される場合は、globbing修飾子を使用してパターンを次のように拡張できます。何もない失敗する代わりに:
for profile in ~/.profiles/*(.N); do
for file in ~/.s1n7ax/$profile:t/alias/*(.N); do
include $file
done
done
N
ここで末尾の括弧は、一致するファイル名がないとパターンを完全に消え、そのループをスキップします。ドットは、通常のファイルのみを選択する別の修飾子です。まだマッチしますか?隠されたD
修飾子リストに追加する必要がある名前。
修飾子は、シェルオプションがシェルで設定されているときとパターンに対してN
同じ効果を持ち、設定と同じ効果を持ちます。一致する名前を繰り返し、テストを使用して各名前をテストする以外は同等の点はありません。nullglob
bash
D
dotglob
bash
-f
末尾に:t
あるのは$profile
「tail」の略語で、変数内のパス名のデフォルト名を提供します。