스크립트가 실패했지만 스크립트에서 복사하여 붙여넣기는 작동합니다.

스크립트가 실패했지만 스크립트에서 복사하여 붙여넣기는 작동합니다.

컴퓨터의 프로세서 수를 확인한 다음 이에 따라 다른 스크립트의 프로세서 번호에 대한 모든 참조를 변경하는 스크립트를 만들었습니다. 먼저 복사해서 터미널에 붙여넣어 테스트해봤습니다. 전체 스크립트를 명령줄에 복사하면 작동합니다. 그러나 스크립트로 실행하면 중간에 실패합니다.

스크립트는 다음과 같습니다(이것이 투박하고 실행하는 더 간단한 방법이 있다는 것을 알고 있습니다. 하지만 이 스크립트의 더 나은 버전과 수정 사항이 있다면 머리 위로 쓰기 쉬웠습니다. 엄청난!)

#!/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스크립트 임을 나타냅니다.

관련 정보