如何将脚本编写为字符串并将其保存在变量十中,在运行时将其回显到任何文件并在终端中执行

如何将脚本编写为字符串并将其保存在变量十中,在运行时将其回显到任何文件并在终端中执行

这是我想要的代码,问题是我在执行时输入的特殊字符,如/等,它不考虑这两个括号之间的文本()字符串以将其保存在变量中,就是这样,所以我该如何解决这个问题我把整个代码放进去让你清楚地了解这个问题提前谢谢

#!/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"

我也尝试了这部分代码将文本直接存储在文件中,我发现存储的是代码的运行结果,而不仅仅是一个字符串,而是按照我想要的方式将其写入文件中

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

答案1

这两种情况下的主要问题可能是$variables会在您需要之前展开。尝试

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

第一个单引号END_OF_SCRIPT基本上单引号了整个此处的文档。

$script其次,无论何时使用,引用都非常重要:

echo "$script" > some_file

否则,所有空格序列(包括换行符)都将被折叠为单个空格。

相关内容