Como posso criar uma instrução de linha de comando (unix/linux) que usa variáveis ​​para executar vários comandos?

StackOverflow https://stackoverflow.com/questions/74886

  •  09-06-2019
  •  | 
  •  

Pergunta

Preciso reorganizar algum conteúdo em vários diretórios, mas é um pouco chato.Para depurar o aplicativo em que estou trabalhando (um aplicativo Ruby), preciso mover minhas gemas para minha pasta de gemas, uma de cada vez (longa história;casca de noz:um está quebrado e não consigo descobrir qual).

Então preciso fazer algo como:

sudo mv backup/gem/foo gem/
sudo mv backup/doc/foo doc/
sudo mv backup/specification/foo.gemspec specification/

substituindo "foo" todas as vezes.Como posso criar um script de shell simples para me permitir fazer algo como:gemMove("foo") e preenche os espaços em branco para mim?

Foi útil?

Solução

coloque o seguinte em um arquivo chamado gemmove:

#!/bin/bash

foo=$1

if [ x$foo == x ]; then
  echo "Must have an arg"
  exit 1
fi

for d in gem doc specification ; do 
  mv backup/$d/$1 $d
done

então faça

chmod a+x gemmove

e então chame 'sudo gemmove foo' para mover a gema foo dos diretórios de backup para os reais

Outras dicas

Você poderia simplesmente usar os argumentos do shell bash, assim:

#!/bin/bash
# This is move.sh
mv backup/gem/$1 gem/
mv backup/doc/$1 doc/
# ...

e então execute-o como:

sudo ./move.sh foo

Certifique-se de tornar o script executável, com

chmod +x move.sh

no bash, algo como:

function gemMove()
{
filename=$1
   mv backup/gem/$filename gem/$filename
   mv backup/doc/$filename doc/$filename
   mv backup/specification/$filename.spec specification
}

então você pode simplesmente ligar gemMove("foo") em outro lugar do roteiro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top