Escrevendo um script que faz outro script que recebe parâmetros

0

Eu gostaria de criar um script que crie outro script usando 2 parâmetros. O segundo script deve usar seu próprio parâmetro. O problema que eu continuo correndo é que o último eco coloca o argumento do primeiro script no segundo. Então, como faço meu segundo script receber um parâmetro? Eu gostaria de saber como fazer isso. Aqui está meu primeiro script:

#! /bin/bash
MY_FILE=$1
MY_PATH=$2
touch $MY_PATH/$MY_FILE
echo "#! /bin/bash" > $MY_FILE
echo "ps -u $1 -o comm=CMD -o pid,ppid,user,uid,gid" >> $MY_FILE
    
por Escu Esculescu 03.11.2017 / 19:42

2 respostas

1

Se você ler o manual do bash shell, aspas duplas preservarão o valor literal dos caracteres dentro das aspas, exceto para '$', '' 'e' \ '. Assim, a linha que você escreveu está substituindo $1 pelo primeiro argumento do primeiro script, em vez de imprimir um literal '$ 1' no segundo script. Eu acredito que o que você quer é isto:

#! /bin/bash
MY_FILE=$1
MY_PATH=$2
touch "$MY_PATH"/"$MY_FILE"
echo "#! /bin/bash" > "$MY_FILE"
echo 'ps -u $1 -o comm=CMD -o pid,ppid,user,uid,gid' >> "$MY_FILE"

Observe que também adicionei aspas duplas em torno das expansões de variáveis, como "$MY_FILE" . Isso é para evitar confusão, caso as strings armazenadas incluam espaços.

No entanto, devo dizer que não entendo o que você está tentando alcançar aqui:

a) Os comandos que você está imprimindo para o segundo script não dependem dos argumentos do primeiro script (nesse caso, você pode simplesmente copiar o segundo script, se precisar duplicá-lo).

b) O arquivo que você tocou com touch "$MY_PATH"/"$MY_FILE" poderia ser um arquivo completamente diferente daquele para o qual você imprimiu os outros comandos, desde que você não tenha incluído a variável "$MY_PATH" nessas chamadas. Talvez seja esse o comportamento pretendido, mas parece um pouco estranho.

    
por 03.11.2017 / 21:50
1
echo 'ps -u $1 -o comm=CMD -o pid,ppid,user,uid,gid' >> $MY_FILE

Em geral, pode ser mais fácil usar um documento aqui para criar um script:

cat <<"EOT" >"$MY_FILE"
#! /bin/bash
ps -u $1 -o comm=CMD -o pid,ppid,user,uid,gid
EOT

Devido às aspas em torno de EOT , nada é expandido.

    
por 03.11.2017 / 20:07