Desejo carregar aliases com base nos arquivos em .profiles/dir.
for profile in ~/.profiles/*; do
for file in ~/.s1n7ax/$(basename $profile)/alias/*; do
include "$file"
done
done
No entanto, quando não há nenhum arquivo dentro ~/.s1n7ax/$(basename $profile)/alias/*
, ele gera um erro.
/home/s1n7ax/.zshrc:117: no matches found: /home/s1n7ax/.s1n7ax/work/alias/*
Eu quero lidar com isso graciosamente sem uma saída de erro para o sdt.
Por padrão, o
zsh
shell tratará padrões de globbing de nome de arquivo sem correspondência como fatais. Se você espera que um glob não corresponda a nada, você pode usar um qualificador de globbing para fazer com que o padrão se expanda para nada em vez de falhar:Aqui, o final
N
entre parênteses fará com que o padrão desapareça completamente se não houver nenhum nome de arquivo correspondente, fazendo com que o loop correspondente seja ignorado. O ponto é outro qualificador que seleciona apenas arquivos regulares. Além disso, você deseja corresponder nomes ocultosD
, deve adicionar à lista de qualificadores.O
N
qualificador tem o mesmo efeito no padrão que ao configurar anullglob
opção shell nobash
shell eD
tem o mesmo efeito que a configuraçãodotglob
. O ponto não tem equivalênciabash
além de iterar sobre os nomes correspondentes e testar cada um com um-f
teste.O
:t
no final de$profile
é a abreviação de "cauda" e fornecerá o nome base do nome do caminho na variável.