
Ich habe ein Skript erstellt, um die Anzahl der Prozessoren des Computers zu prüfen und dann alle Verweise auf die Prozessornummer in einem anderen Skript entsprechend zu ändern. Ich habe es zuerst getestet, indem ich es kopiert und in das Terminal eingefügt habe. Ich kann das gesamte Skript in die Befehlszeile kopieren und es funktioniert. Aber wenn ich es als Skript ausführe, schlägt es auf halbem Weg fehl.
Hier ist das Skript (ich weiß, es ist klobig und es gibt definitiv eine einfachere Möglichkeit, es auszuführen, aber das konnte ich spontan leicht aufschreiben. Wenn Sie eine bessere Version dieses Skripts und eine Lösung hätten, wäre das großartig!)
#!/bin/sh
# This part works both in the script and when pasting into the terminal.
echo | nproc > ~/tmp/ProcessorNumber.txt
echo | perl -pi -e 's/processors=1/processors=8/g' ~/Scripts/test.sh
echo | perl -pi -e 's/processors=2/processors=8/g' ~/Scripts/test.sh
echo | perl -pi -e 's/processors=3/processors=8/g' ~/Scripts/test.sh
echo | perl -pi -e 's/processors=4/processors=8/g' ~/Scripts/test.sh
echo | perl -pi -e 's/processors=5/processors=8/g' ~/Scripts/test.sh
echo | perl -pi -e 's/processors=6/processors=8/g' ~/Scripts/test.sh
echo | perl -pi -e 's/processors=7/processors=8/g' ~/Scripts/test.sh
# This part of the script isn't working when run as script
# but is working when pasted into the command line.
if (( $(head -n1 ~/tmp/ProcessorNumber.txt) == 1 ))
then
echo | perl -pi -e 's/processors=8/processors=1/g' ~/Scripts/test.sh
else
echo | ""
fi
if (( $(head -n1 ~/tmp/ProcessorNumber.txt) == 2 ))
then
echo | perl -pi -e 's/processors=8/processors=2/g' ~/Scripts/test.sh
else
echo | ""
fi
if (( $(head -n1 ~/tmp/ProcessorNumber.txt) == 3 ))
then
echo | perl -pi -e 's/processors=8/processors=3/g' ~/Scripts/test.sh
else
echo | ""
fi
if (( $(head -n1 ~/tmp/ProcessorNumber.txt) == 4 ))
then
echo | perl -pi -e 's/processors=8/processors=4/g' ~/Scripts/test.sh
else
echo | ""
fi
if (( $(head -n1 ~/tmp/ProcessorNumber.txt) == 5 ))
then
echo | perl -pi -e 's/processors=8/processors=5/g' ~/Scripts/test.sh
else
echo | ""
fi
if (( $(head -n1 ~/tmp/ProcessorNumber.txt) == 6 ))
then
echo | perl -pi -e 's/processors=8/processors=6/g' ~/Scripts/test.sh
else
echo | ""
fi
if (( $(head -n1 ~/tmp/ProcessorNumber.txt) == 7 ))
then
echo | perl -pi -e 's/processors=8/processors=7/g' ~/Scripts/test.sh
else
echo | ""
fi
Antwort1
Versuchen Sie stattdessen dieses Skript:
#!/bin/sh
sed -i -e "s/processors=[0-9]\+/processors=$(nproc)/g" ~/Scripts/test.sh
sed
ist ein Stream EDitor. -i
Der Schalter gibt an, dass alle Änderungen an Ort und Stelle vorgenommen werden sollen, -e
obwohl dies optional ist, gibt an, dass das folgende Argument ein sed
Skript ist