Adicionando Comandos com Base nos Diretórios Encontrados

0

Existe uma maneira de criar um script bash que varre um diretório dir0 para pastas, de modo que, para todas as pastas dir1 , encontradas em dir0 , um comando dir1-command seja criado com a seguinte definição:

dir1-command() {
 cd dir0/dir1
 echo "inside dir0/dir1"
 cd -
}

EDITAR: O problema específico que estou tentando resolver é o seguinte: Eu tenho uma pasta chamada scripts que tem subpastas como scripts/haskell_script1 e scripts/haskell_script2 . A maneira de iniciar, digamos, scripts/haskell_script1 é a seguinte:

haskell_script1() {
 cd scripts/haskell_script1
 stack exec haskell_script1 -- $@
 cd -
}

E o que eu gostaria de fazer é, sempre que ~/.bashrc é originado, escanear minha pasta scripts e gerar vários comandos do formulário haskell_scriptX para economizar tempo. Dessa forma, não preciso criar manualmente um comando para cada pasta de projeto / pasta haskell que eu criar.

    
por George 07.06.2017 / 13:25

1 resposta

1

Adicione isto ao seu .bashrc:

for script in scripts/haskell_script*
do
  # strip off the leading "scripts/" portion
  script=${script##*/}
  eval "function ${script} { 
    cd scripts/${script}
    stack exec ${script} -- \$@
    cd -
  }"
done

Você precisa ter cuidado com qualquer coisa dentro dessa definição que possa ser prematuramente eval uada, e é por isso que escapei do $ in $@ .

    
por 07.06.2017 / 18:11

Tags