Um script bash pode informar qual diretório o usuário está quando executa o script?

0

É possível que um script de shell conheça o diretório em que o usuário está quando o executa? Eu estou tentando desenvolver um script como este que é executado através de uma lista de subdiretórios e executa alguns comandos git sobre eles. Uma maneira pode ser passar pwd para ela, mas existem alguns parâmetros adicionais que serão necessários e é por isso que eu quero usar uma função interna para obter o diretório de trabalho.

O exemplo assume o diretório atual.

#!/bin/bash

for d in */ ; do
  echo ""
  echo "===================="
  echo ""
  echo "$d"

  git -C "$d" remote show origin
  echo ""
  echo "===================="
  echo ""
done
    
por vfclists 16.10.2016 / 15:27

3 respostas

3

Cascas POSIX (como bash ) e fish tornam o caminho do diretório de trabalho atual (uma propriedade de processo herdada por filhos e preservada na execução de comandos) na variável $PWD special em shells POSIX. O equivalente para os escudos csh é igual a $cwd .

A variável é dinâmica. Seu conteúdo pode mudar depois que você chamar um comando que altera o diretório atual como cd (ou pushd / popd em alguns shells). Os shells POSIX também mantêm uma variável $OLDPWD que contém o diretório de trabalho anterior de antes de você chamar com êxito cd / pushd / popd .

O comando pwd imprime um caminho para o diretório atual. Em shells POSIX, esse comando geralmente é embutido e apenas imprime o conteúdo de $PWD .

Se você quiser saber o diretório de trabalho no momento em que o script foi iniciado, será necessário gravá-lo no início do script, como:

#! /bin/sh -
original_PWD=$PWD
...
cd ...

Para conhecer o diretório de trabalho atual do seu processo pai, no GNU / Linux, você pode fazer

parent_PWD=$(readlink -ve "/proc/$PPID/cwd")

embora você nem sempre tenha permissão para obter essas informações. Se seu pai morreu, você será adotado por init ou pelo sub-reaper criança, se houver. No entanto, $PPID não será atualizado, assim você poderá obter o cwd do processo errado nesse caso (se o pid do seu pai foi reutilizado).

    
por 16.10.2016 / 18:57
2

Claro, o script herda o diretório atual do shell / programa que o executa. Portanto, todas as referências de nomes de arquivos seriam relativas a isso, a menos que o script faça um cd em si. Saber a localização do arquivo de script em si é mais difícil de ser feito e pode ser quase impossível.

    
por 16.10.2016 / 15:46
1

Eu não acho que exista uma variável de ambiente para isso, mas você pode fazer sua própria variável para usar facilmente sem muitos comandos.

Por exemplo:

#!/bin/bash
starting_dir=$(pwd)  #use pwd to get the starting directory

#do things
cd some_example_dir/
#do more things

cd $starting_dir  #go back to the directory

Nesse caso, você está apenas salvando o caminho do diretório inicial como uma string na variável $starting_dir . Ele é salvo como um caminho absoluto, então você pode cd a qualquer momento.

    
por 16.10.2016 / 17:46