这是我想要的代码,问题是我在执行时输入的特殊字符,如/等,它不考虑这两个括号之间的文本()字符串以将其保存在变量中,就是这样,所以我该如何解决这个问题我把整个代码放进去让你清楚地了解这个问题提前谢谢
#!/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
否则,所有空格序列(包括换行符)都将被折叠为单个空格。