Como posso criar uma instrução de linha de comando (unix/linux) que usa variáveis para executar vários comandos?
-
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?
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.