Passa o parâmetro para um script redirecionado no Linux

0

Eu tenho dois scripts, suponha que sejam s1.sh e s2.sh.

Em s1, o código é

step = 0
.
.(omitted)
.
if [ $step -eq 19 ]; then

    ./s2.sh 

Em s2, o código é

step=0
.
. (many codes here, but omitted)
.
if [ $step -eq 18 ]; then
  print "hello"

Eu quero rodar o s1 do passo 19, e quando o s1 chamar o s2, eu espero que o s2 possa ir diretamente para o passo 19 também.

Eu ouvi alguém falando sobre isso antes, mas eu realmente não conseguia lembrar o método exato. Eu estou pensando que os códigos de comando para fazer isso seria como:

./s1.sh --step 19 [some code?]--step 18

Alguma ideia de como escrever a linha de comando que poderia passar o argumento para dois scripts como acima?

    
por exteralvictor 13.10.2018 / 05:53

2 respostas

0

Se você quiser que step seja o mesmo em ambos, execute export step em s1. Depois de fazer isso, a variável step estará presente em s2 sem que seja explicitamente passada quando você a chamar.

Se você quiser definir um step em s2 diferente de s1, acrescente step=whatever à chamada para s2. Por exemplo, para torná-lo 8 em s2, você faria isso: step=8 ./s2.sh .

    
por 13.10.2018 / 05:59
0

Um método para alcançar este resultado é usar argumentos posicionais:

Este é o script test1.sh:

#!/bin/bash

step=$1
step2=$2

if [[ step -eq 19 ]]; then
    ./test2.sh $step2
fi

e o script test2.sh:

#!/bin/bash

step=$1

if [[ step -eq 18 ]]; then
    echo "success - step 18 executed"
fi

Então você pode chamar test1.sh (no seu caso s1.sh) assim:

./test1.sh 19 18

Depois disso, você deve receber a mensagem de sucesso. Embora isso envolva editar um pouco os scripts originais, ele oferece bastante flexibilidade e torna mais simples a extensão dos dois scripts. Se você decidir usar esse método, aconselho vivamente a estabelecer valores padrão para a etapa e etapa2 vars.

    
por 13.10.2018 / 10:42