쉘 프로그래밍과 cpp 파일을 사용하여 디버깅하시나요?

쉘 프로그래밍과 cpp 파일을 사용하여 디버깅하시나요?

내 코드가 어떻게 작동하는지 이해할 수 없습니다. 저는 이 프로젝트를 처음 접했고 이전에 유닉스를 배운 적이 없습니다. 내 동료는 나에게 프로그램 실행 방법을 재빨리 보여주었지만 작동 방식은 설명하지 않았습니다.

make를 실행하여 모든 C++ 파일이 올바르게 컴파일되었는지 확인한 후 그는 명령 프롬프트로 가서 다음을 입력했습니다../run.sh list.txt

run.sh파일을 살펴봤습니다 . 다음과 같이:

DIR=/directory/scripts/binaries/what

LIST=$1

while read PDF
do 
    echo "HOLD ON ${PDF}..." 
    ./makeInputAX.sh ${PDF} ${PDF} >INPUT/${PDF}.something 
    ${DIR} -AX INPUT/${PDF}.something # I don't want to reveal the actual types of files I'm dealing with, so I called them 'something'
done < ${LIST}

파일 makeInputAX.sh은 다음과 같습니다

$PDF=1
echo "THEFILE ABC/{PDF}.something"

다음 list.txt을 포함합니다.

12345

그래서 나는 이미 run.sh내부 내용을 읽고 변수 에 list.txt할당하는 방법을 알고 있습니다. 명령프롬프트에서 봤습니다 . 나를 혼란스럽게 하는 것은 먼저 실행한 다음 호출한다고 생각했는데 해당 할당이 없을 때 어떻게 할당합니까 ?12345LISTHOLD ON 12345run.shmakeInputAX.shPDFlist.txtmakeInputAX.shrun.sh

또한 나를 혼란스럽게 하는 것은 명령 프롬프트에서 프로젝트의 일부인 cpp 파일에 작성된 프로그램의 출력을 볼 수 있다는 것입니다. 그러나 파일은 대신 별도의 디렉토리에 있습니다 /directory/scripts/binaries/what. 이러한 cpp 파일을 변경하고 새 출력을 확인하고 싶었지만 오류가 발생했습니다.

 could not open the somethingelse file for read

그러나 could not open the ..내 C++ 코드에는 작성되지 않았습니다. 이 문제를 해결하려면 내 cpp 파일을 조사해야 합니까, 아니면 이 sh 파일이 도움이 됩니까?

답변1

$1스크립트의 첫 번째 매개변수입니다.list.txt

LIST=$1

해당 파일 이름을 LIST변수 에 복사하면 $LIST이제 lists.txt변수도 포함됩니다. 그렇지 않습니다 12345.

while read PDF
do
    ...
done < ${LIST}

파일로 리디렉션된 표준 입력을 사용하여 루프를 시작 list.txt하고 루프를 통과할 때마다 파일에서 변수로 한 줄을 읽습니다 PDF. 따라서 $PDF`12345가 포함됩니다.

의 변수는 makeInputAX.sh의 변수와 아무 관련이 없습니다 run.sh. 따라서 그들은 각각이라는 이름의 자체 변수를 가지며 PDF독립적으로 작동합니다. 유일한 예외는 export명령을 사용하여 선언되는 환경 변수입니다. 호출 스크립트에 설정된 환경 변수는 호출하는 스크립트의 환경에 복사됩니다(그 반대는 아님).

스크립트에서 "읽기 위해 다른 파일을 열 수 없습니다"라는 내용이 표시되지 않습니다. 이는 C++ 프로그램에서 나온 것임에 틀림없습니다. 아마도 프로그램이 호출하는 라이브러리에 있을 것이므로 코드의 어느 곳에서도 메시지를 볼 수 없습니다.

그러나 makeInputAX.sh스크립트가 올바르지 않은 것 같습니다. 아마도 다음과 같을 것입니다:

PDF=1
echo "THEFILE ABC/${PDF}.something"

$다른 명령에 변수 값을 삽입할 때는 할당에 사용하지 말고 변수 앞에 넣으세요 . 그것을 거꾸로 가져와 $과제에는 사용했지만 echo명령에는 사용하지 않았습니다.

관련 정보