Como escrever um script como uma string e salvá-lo na variável dez, ecoá-lo para qualquer arquivo durante o tempo de execução e executá-lo em um terminal

0

Aqui você é o código que eu quero fazer, o problema são os caracteres especiais que eu punt como / e, em seguida, e essas coisas durante a execução, não considere o texto entre os dois parênteses () uma string para salvá-lo em uma variável e é tudo assim, como posso fazer isso  Eu coloquei todo o código para dar uma idéia clara sobre o problema Agradecemos antecipadamente

#!/bin/bash 

trap "echo 'Caught' >/home/ahmedubuntu/Desktop/fsg.txt" SIGINT SIGTERM SIGHUP


script=( #!/bin/bash 
echo "fdsfds"
while sleep 4
do
i=0
while read line
do
if [ -n "$line" ] && ["$line" != "separator"] 
then
programeNameAndPID[i]=$line
((i++))
elif [["$line" == "separator"]] ; then
getAllPIDRunUnderThisProgram=$( ps -e | grep "$programeNameAndPID[0]" | awk '{print $1;}')
if [${#getAllPIDRunUnderThisProgram[*]} -gt ${#programeNameAndPID[*]}-2  ]
then
unset gnomeTab
newProcessNumber=${#getAllPIDRunUnderThisProgram[*]}-${#programeNameAndPID[*]}-2
index=${#getAllPIDRunUnderThisProgram[*]}-1
for (( c=$newProcessNumber ; c > 0 ; c-- ))
do
gnomeTab+=( --tab -e "cpulimit -p $getAllPIDRunUnderThisProgram[$index] -l $programeNameAndPID[1] ") 
((index--)) 
done
gnome-terminal "${gnomeTab[@]}"
fi
i=0
unset programeNameAndPID
fi
done < $dataFile
done)
echo -e $script > /home/ahmedubuntu/Desktop/script.txt
gnome-terminal -e " /home/ahmedubuntu/Desktop/script.txt"

também eu tentei esta parte do código para armazenar o texto no arquivo diretamente e eu encontrei que o armazenado é a execução do código não apenas considerado uma string e apenas escrevê-lo no arquivo como eu quero

cat > /home/ahmedubuntu/Desktop/script.sh << EOF 
#!/bin/bash 
echo "fdsfds"
while sleep 4
do
i=0
while read line
do
if [ -n "$line" ] && ["$line" != "separator"] 
then
programeNameAndPID[i]=$line
((i++))
elif [["$line" == "separator"]] ; then
getAllPIDRunUnderThisProgram=$( ps -e | grep "$programeNameAndPID[0]" | awk '{print $1;}')
if [${#getAllPIDRunUnderThisProgram[*]} -gt ${#programeNameAndPID[*]}-2  ]
then
unset gnomeTab
newProcessNumber=${#getAllPIDRunUnderThisProgram[*]}-${#programeNameAndPID[*]}-2
index=${#getAllPIDRunUnderThisProgram[*]}-1
for (( c=$newProcessNumber ; c > 0 ; c-- ))
do
gnomeTab+=( --tab -e "cpulimit -p $getAllPIDRunUnderThisProgram[$index] -l $programeNameAndPID[1] ") 
((index--)) 
done
gnome-terminal "${gnomeTab[@]}"
fi
i=0
unset programeNameAndPID
fi
done < $dataFile
done
EOF
    
por Ahmed Zain El Dein 04.05.2013 / 14:24

1 resposta

2

provavelmente, o principal problema em ambos os casos é que o $variables será expandido antes do desejado. Experimente

script=$(cat <<'END_OF_SCRIPT'
# your script goes here. 
END_OF_SCRIPT
)

As aspas simples no primeiro END_OF_SCRIPT basicamente citam o documento inteiro aqui.

Em seguida, é muito importante citar $script sempre que você usá-lo:

echo "$script" > some_file

Caso contrário, todas as sequências de espaços em branco, incluindo novas linhas, serão reduzidas a um único espaço.

    
por glenn jackman 04.05.2013 / 15:39