Das Skript schlägt fehl, aber das Kopieren und Einfügen aus dem Skript funktioniert

Das Skript schlägt fehl, aber das Kopieren und Einfügen aus dem Skript funktioniert

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

sedist ein Stream EDitor. -iDer Schalter gibt an, dass alle Änderungen an Ort und Stelle vorgenommen werden sollen, -eobwohl dies optional ist, gibt an, dass das folgende Argument ein sedSkript ist

verwandte Informationen