腳本失敗,但從腳本複製和貼上有效

腳本失敗,但從腳本複製和貼上有效

我編寫了一個腳本來檢查電腦的處理器數量,然後根據該腳本更改另一個腳本中處理器編號的所有參考。我首先通過將其複製並粘貼到終端中進行測試。我可以將整個腳本複製到命令行並且它可以工作。但是當我將它作為腳本運行時,它一半失敗了。

這是腳本(我知道它很笨重,而且肯定有一種更簡單的運行方法,但這很容易寫出我的想法,如果你有這個腳本的更好版本和修復程序,那麼那就是驚人的!)

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

答案1

試試這個腳本:

#!/bin/sh
sed -i -e "s/processors=[0-9]\+/processors=$(nproc)/g" ~/Scripts/test.sh

sed是一個流編輯器。-iswitch 告訴它進行所有更改,-e儘管是可選的,但告訴它以下參數是一個sed腳本

相關內容