Para testar se uma string é um prefixo de outra, em qualquer shell do estilo Bourne:
case $PWD/ in
/home/*) echo "home sweet home";;
*) echo "away from home";;
esac
O mesmo princípio funciona para um teste de sufixo ou substring. Observe que, nas construções case
, diferentemente dos nomes de arquivos, *
corresponde a qualquer caractere, incluindo /
ou inicial .
.
Em shells que implementam a sintaxe [[ … ]]
(ou seja, bash, ksh e zsh), ela pode ser usada para corresponder uma string a um padrão. (Observe que o comando [
só pode testar strings para igualdade.)
if [[ $PWD/ = /home/* ]]; then …
Se você estiver testando especificamente se o diretório atual está abaixo de /home
, um teste simples de substring não é suficiente, devido a links simbólicos.
Se /home
for um sistema de arquivos próprio, teste se o diretório atual ( .
) está nesse sistema de arquivos.
if [ "$(df -P . | awk 'NR==2 {print $6}')" = "/home" ]; then
echo 'The current directory is on the /home filesystem'
fi
Se você tem o NetBSD, OpenBSD ou GNU (ou seja, Linux) readlink
, você pode usar readlink -f
para remover links simbólicos de um caminho.
case $(readlink -f .)/ in $(readlink -f /home)/*) …
Caso contrário, você pode usar pwd
para mostrar o diretório atual. Mas você deve tomar cuidado para não usar um shell embutido se o seu shell rastreia os comandos cd
e mantém o nome que você usou para alcançar o diretório ao invés de seu local "real".
case $(pwd -P 2>/dev/null || env PWD= pwd)/ in
"$(cd /home && { pwd -P 2>/dev/null || env PWD= pwd; })"/*) …