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

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

나는 컴퓨터의 프로세서 번호를 확인한 다음 해당 스크립트를 기반으로 하는 다른 스크립트의 프로세서 번호에 대한 모든 참조를 변경하는 스크립트를 작성했습니다. 먼저 이것을 복사하여 터미널에 붙여넣어 테스트했습니다. 전체 스크립트를 명령줄에 복사하면 작동합니다. 그러나 스크립트로 실행하면 절반 정도 실패합니다.

스크립트는 다음과 같습니다(이 스크립트가 투박하고 더 쉬운 실행 방법이 있다는 것을 알고 있지만, 제가 생각한 것을 작성하는 것은 쉽습니다. 이 스크립트의 더 나은 버전과 수정 사항이 있다면 정말 놀라울 것입니다!)

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

관련 정보