Estou tentando mesclar vários comandos linux em uma linha para executar a operação de implantação. Por exemplo
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
fonte
Estou tentando mesclar vários comandos linux em uma linha para executar a operação de implantação. Por exemplo
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
Se você deseja executar cada comando apenas se o anterior tiver sido bem-sucedido, combine-os usando o &&
operador:
cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install
Se um dos comandos falhar, todos os outros comandos seguintes não serão executados.
Se você deseja executar todos os comandos, independentemente de os anteriores terem falhado ou não, separe-os com ponto e vírgula:
cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install
No seu caso, acho que você quer o primeiro caso em que a execução do próximo comando depende do sucesso do anterior.
Você também pode colocar todos os comandos em um script e executá-lo:
#! /bin/sh
cd /my_folder \
&& rm *.jar \
&& svn co path to repo \
&& mvn compile package install
(As barras invertidas no final da linha existem para impedir que o shell pense que a próxima linha é um novo comando; se você omitir as barras invertidas, será necessário gravar o comando inteiro em uma única linha.)
Salve isso em um arquivo, por exemplo myscript
, e torne-o executável:
chmod +x myscript
Agora você pode executar esse script como outros programas na máquina. Mas se você não o colocar dentro de um diretório listado em sua PATH
variável de ambiente (por exemplo /usr/local/bin
, ou em algumas distribuições Linux ~/bin
), será necessário especificar o caminho para esse script. Se estiver no diretório atual, você o executará com:
./myscript
Os comandos no script funcionam da mesma maneira que os comandos no primeiro exemplo; o próximo comando somente será executado se o anterior tiver êxito. Para execução incondicional de todos os comandos, basta listar cada comando em sua própria linha:
#! /bin/sh
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
||
vez de ponto-e-vírgula ou&&
se desejar que o próximo comando seja executado apenas se o último falhar. Como em tentar isso, e se falhar, tente isso.ls >/dev/null & ; echo $!
dispara um erro.tail -f my.log & && ./myscript
que não está funcionando .. por favor sugira.{ tail -f my.log & } && ./myscript
No entanto, observe que&&
aqui é inútil, pois o primeiro trabalho é executado em segundo plano e, portanto, o segundo trabalho não pode saber o resultado, pois os dois trabalhos serão iniciados ao mesmo tempo. Então é melhor você escrever:{ tail -f my.log & }; ./myscript
sudo
permissões para executar um dos comandos? Devo colocar osudo
no início de todos os comandos ou apenas o que precisa? Como posso passar a senha para esse comando para que seja executada corretamente?Eu descobri isso usando; separar comandos só funciona em primeiro plano. por exemplo :
cmd1; cmd2; cmd3 &
- executará apenascmd3
em segundo plano, enquantocmd1 && cmd2 && cmd3 &
- executará toda a cadeia em segundo plano, se não houver erros.Para atender à execução incondicional, o uso de parênteses resolve isso:
(cmd1; cmd2; cmd3) &
- executará a cadeia de comandos em segundo plano, mesmo se alguma etapa falhar.fonte
Você pode separar seus comandos usando um ponto e vírgula:
Foi isso que você quis dizer?
fonte
Para executá-los todos de uma vez, você pode usar a tecla da linha do tubo "|" igual a:
fonte
Se você deseja executar todos os comandos, independentemente de o anterior executar ou não, você pode usar ponto-e-vírgula (;) para separar os comandos.
Se você deseja executar o próximo comando apenas se o comando anterior for bem-sucedido, use && para separar os comandos.
No seu caso, a execução de comandos consecutivos parece depender dos comandos anteriores; portanto, use o segundo exemplo, ou seja, use && para associar os comandos.
fonte
fonte
cmd1 || cmd2
separador se precisarcmd2
executar apenas ocmd1
status diferente de zero retornado ao shell e pode usarcmd1 ; cmd2
se desejar executar os dois comandos, independentemente do status de retorno.Qual é a utilidade de um único E comercial? Hoje de manhã, criei um iniciador no painel XFCE (no Manjaro + XFCE) para iniciar dois gerenciadores de senhas simultaneamente:
Mas não funciona como eu quero. IE, o primeiro aplicativo é iniciado, mas o segundo é iniciado apenas quando o anterior é fechado
No entanto, descobri que (com apenas um e comercial):
e funciona como eu quero agora ...
fonte
;
, exceto que isso coloca o comman antes dele em segundo plano, ou seja, o shell não verá sua saída.Você pode usar como o seguinte código;
Funciona...
fonte
Acho muitas respostas para esse tipo de pergunta enganosa
Modificado a partir deste post: https://www.webmasterworld.com/linux/3613813.htm
O código a seguir criará a janela do bash e funciona exatamente como uma janela do bash. Espero que isto ajude. Muitas respostas erradas / que não funcionam por aí ...
fonte