Bash 쉘 스크립트를 통해 프로그램을 여러 번 호출

Bash 쉘 스크립트를 통해 프로그램을 여러 번 호출

make_ndx스위치를 통해 -o출력하는 프로그램이 있다고 가정해 보겠습니다 . myprogrambash 쉘 스크립트 out1.ndxout2.ndx.( myprogram문자열을 스위치에 대한 입력으로 사용 -o하고 파일 확장자를 자동으로 .ndx문자열에 추가) 에서 두 개의 파일을 호출하고 출력 하고 싶습니다 . 그래서 bash 쉘 스크립트를 작성했습니다.

#!/bin/bash

make_ndx -o out1
make_ndx -o out2

두 개의 출력 파일을 얻습니다: out1.ndx및 . 그러나 합계를 out2.ndx얻고 싶습니다 .out1.ndxout2.ndx

파일 이름을 복사하여 텍스트 파일(또는 이 게시물)에 붙여넣으면 다음 과 같이 나타나기 때문에 의 문자는 개행 또는 반환 문자(아마도 또는 \n? )에 해당하는 것 같습니다 .\rout1.ndx

out1
.ndx

(이 기사의 목적에 따라 SSH GUI에서 볼 수 있는 사각형 기호를 나타내기 위해 다른 문자( .)

첫 번째 출력 파일의 파일 이름에 줄 바꿈이 나타나지 않도록 bash 쉘 스크립트를 어떻게 작성할 수 있습니까? 호출 사이에 추가 공백을 추가하면 동일한 문제가 발생합니다 make_ndx.

#!/bin/bash

make_ndx -o out1

make_ndx -o out2

시간 내 주셔서 감사합니다.

답변1

두 가지 가능성이 있는 것 같습니다.

  1. 파일 이름의 일부로 \r을 전달합니다. 이런 일은 일반적으로 일어나서는 안 됩니다. 파일의 EOL 문자가 일치하지 않는 경우 이 문제가 발생할 수 있습니다. Windows는 CRLF 쌍을 사용하여 텍스트 파일의 줄을 종료합니다. Unix는 LF만 사용합니다. 파일을 어떻게 편집하느냐에 따라 CRLF를 추가할 수 있으며, 이는 다양한 상황을 깨뜨릴 수 있습니다.

    또 다른 변형은 out1이 실제로 변수( make_ndx -o "$out1")에서 나온 경우 변수에서 LF를 캡처했을 수 있다는 것입니다. 로 시작하는지 확인하면 조치 echo -n "$out1" | xxd -p가 표시됩니다 0a.

  2. make_ndx오프로드 차량입니다. 이 명령은 \r을 전달하지 않고 내부적으로 삽입합니다. Bash 스크립트를 통해 할 수 있는 일은 없습니다(글쎄, mv이름을 수정하는 것 외에는). 소스 코드가 있으면 make_ndx직접 수정할 수 있습니다. 그렇지 않으면 해당 코드를 지원하는 사람에게 문의해야 합니다.

여러 가지 방법으로 줄 끝이 혼합되어 있는지 확인할 수 있습니다. 예를 들어, xxdbash 스크립트의 16진수 덤프를 얻는 경우 0x0dCR(\r)입니다 . 0x0aLF(\n)입니다. 파일에 CR이 표시되어서는 안 됩니다.

관련 정보