スクリプトは失敗しましたが、スクリプトからコピーして貼り付けるのはうまくいきます。

スクリプトは失敗しましたが、スクリプトからコピーして貼り付けるのはうまくいきます。

私はコンピュータのプロセッサ番号を確認し、そのスクリプトに基づいて他のスクリプトのプロセッサ番号へのすべての参照を変更するスクリプトを作成しました。まずこれをコピーして端末に貼り付けてテストしました。スクリプト全体をコマンドラインにコピーすると機能します。しかし、スクリプトで実行すると、半分ほど失敗します。

スクリプトは次のようになります(このスクリプトが愚かで簡単な実行方法があることを知っていますが、私が思ったことを書くのは簡単です。このスクリプトのより良いバージョンと修正があれば本当に驚くでしょう!)

#!/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ストリームエディタです。-iスイッチはすべての変更を実行するように指示し、オプションですが、次の引数がスクリプトであることを知らせ-eますsed

おすすめ記事