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.