Preâmbulo: Nunca criei um script shell bash antes. Então, e antes de mais nada, nem tenho certeza se esta É a ferramenta certa para o trabalho. Se não for, por favor, e antes de tudo, diga-me qual é, na sua opinião, a melhor alternativa.
Contexto: Costumo realizar tarefas repetitivas sempre que tento configurar um site. Desejo automatizar essas tarefas executando um ou dois comandos. ATUALIZAÇÃO: O host compartilhado é baseado em Unix. As máquinas locais são Mac OS X, também baseadas em Unix.
Por exemplo, aqui estão algumas das tarefas (comandos) que executo com frequência:
SCP:
scp ~/local/path/general_web_app/.bash_profile [email protected]:/home/HOSTNAME/.bash_profile
scp ~/local/path/general_web_app/.gitconfig [email protected]:/home/HOSTNAME/.gitconfig
SSH diretamente:
ssh [email protected]
cd /www/www/
git init
git add .
git commit -a -m "first commit"
cd ~/private/ && mkdir repos
EDITAR, ENCONTRAR, SUBSTITUIR, SALVAR E SAIR:
pico ~/remote/private/repos/general_hub.git/hooks/post-update
replace "user" WITH "hostname";
hit "cmd x"
hit "y"
AFAIK: Esses são os diferentes tipos de tarefas que desejo que o script execute.
Questão 1: O script bash pode manipular SCP, SSH diretamente e EDIT FIND REPLACE SAVE AND EXIT?
Questão 2: Alguns parâmetros devem ser solicitados ao usuário que executa o script, e esses parâmetros devem ser usados para serem colocados dentro de alguns arquivos (substituindo palavras-chave específicas existentes) - isso pode ser feito?
Questão 3: Devemos copiar os arquivos para o controle remoto e editar diretamente no controle remoto ou devemos pegar os arquivos localmente, "editá-los localmente em um local temporário" e, em seguida, colocá-los no servidor? Presumo que o segundo seja muito mais complicado.
Algum exemplo que eu possa ver?
Muito obrigado antecipadamente
Responder1
A resposta curta é: sim para todos.
Vou te dar alguns exemplos. A seguir está um exemplo de comando que executa um script bash local em uma máquina remota: observe que não é necessário copiá-lo remotamente:
ssh user@remote_pc 'bash -s' < local_file.sh
Isso é tão simples que pode não merecer escrever um script inteiro para lidar com isso, mas se você desejar, também pode ser organizado por meio de um script. Para que isso funcione, você terá que configurar passwordless login
conexões ssh. Caso contrário, os comandos ssh/scp dentro do script serão interrompidos enquanto aguardam que você insira a senha do usuário remoto.
Quanto à edição e assim por diante, o Unix possui o editor de fluxo definitivo sed
, que faz exatamente isso: por exemplo, o comando
sed 's/a/A/g' old_file.txt > new_file.txt
substitui minúsculas a
por maiúsculas A
e coloca a saída em um novo arquivo. Isso também pode ser facilmente programado.
Quanto aos parâmetros, o shell script pode ler parâmetros de um arquivo ou pode consultar o ambiente em busca de alguns parâmetros. Não há necessidade de pedir ao usuário seu nome de login,
echo $USER
whoami
fará isso, mesmo dentro do script. A mesma coisa para um endereço residencial, echo $HOME
e assim por diante.
Quanto à sua terceira pergunta, espero que minha primeira resposta também responda: o primeiro comando permite que você execute um arquivo de script, que você editou localmente, em um servidor remoto, sem precisar copiá-lo para lá.
Bem-vindo ao mundo de *Nix, ondeseu desejo é uma ordem.
Desculpe, esqueci: este comando
export -p | more
exibirá todas as variáveis locais que estão disponíveis em todos os lugares (tecnicamente, que foram exportado).