De onde é executado um script de shell?

4

Eu tenho um script de shell em /usr/bin . Vamos chamá-lo de hello .

Ele contém isso:

 echo "I am located in $PWD"
 echo "I am called from this directory: ???"

Executando hello de /home/Documents Espero a seguinte saída:

 I am located in /usr/bin
 I am called from this directory: /home/Documents

Como posso obter o caminho do diretório onde o script é executado?

    
por Ionică Bizău 04.03.2014 / 08:35

2 respostas

8

Não posso comentar outra resposta, por isso estou postando aqui. Como dito, dirname apenas lê $0 e pega o nome do diretório, então se você chamou algo como ../../directory/something.sh ele não resolve esses pontos, mas apenas retorna ../../directory . Em vez de usar a expansão subshell com cd e pwd , você pode usar um comando muito inteligente readlink que realmente resolve não apenas diretórios pontilhados, mas também todos os links simbólicos. Portanto, sugiro

  echo "I am located at $(readlink -e -- "$0")"

Você pode usar outro dirname em torno disso para obter o diretório em vez do arquivo.

    
por 04.03.2014 / 10:22
5

$PWD foi a variável que contém o diretório atual. Para obter o diretório para o script de shell $(dirname -- "$0") pode ser usado.

O conteúdo do script será parecido com:

echo "I am located in $(dirname -- "$0")"
echo "I am called from this directory: $PWD"
    
por 04.03.2014 / 08:39