make_ndx
스위치를 통해 -o
출력하는 프로그램이 있다고 가정해 보겠습니다 . myprogram
bash 쉘 스크립트 out1.ndx
와 out2.ndx
.( myprogram
문자열을 스위치에 대한 입력으로 사용 -o
하고 파일 확장자를 자동으로 .ndx
문자열에 추가) 에서 두 개의 파일을 호출하고 출력 하고 싶습니다 . 그래서 bash 쉘 스크립트를 작성했습니다.
#!/bin/bash
make_ndx -o out1
make_ndx -o out2
두 개의 출력 파일을 얻습니다: out1.ndx
및 . 그러나 합계를 out2.ndx
얻고 싶습니다 .out1.ndx
out2.ndx
파일 이름을 복사하여 텍스트 파일(또는 이 게시물)에 붙여넣으면 다음 과 같이 나타나기 때문에
의 문자는 개행 또는 반환 문자(아마도 또는 \n
? )에 해당하는 것 같습니다 .\r
out1.ndx
out1
.ndx
(이 기사의 목적에 따라
SSH GUI에서 볼 수 있는 사각형 기호를 나타내기 위해 다른 문자( .)
첫 번째 출력 파일의 파일 이름에 줄 바꿈이 나타나지 않도록 bash 쉘 스크립트를 어떻게 작성할 수 있습니까? 호출 사이에 추가 공백을 추가하면 동일한 문제가 발생합니다 make_ndx
.
#!/bin/bash
make_ndx -o out1
make_ndx -o out2
시간 내 주셔서 감사합니다.
답변1
두 가지 가능성이 있는 것 같습니다.
파일 이름의 일부로 \r을 전달합니다. 이런 일은 일반적으로 일어나서는 안 됩니다. 파일의 EOL 문자가 일치하지 않는 경우 이 문제가 발생할 수 있습니다. Windows는 CRLF 쌍을 사용하여 텍스트 파일의 줄을 종료합니다. Unix는 LF만 사용합니다. 파일을 어떻게 편집하느냐에 따라 CRLF를 추가할 수 있으며, 이는 다양한 상황을 깨뜨릴 수 있습니다.
또 다른 변형은 out1이 실제로 변수(
make_ndx -o "$out1"
)에서 나온 경우 변수에서 LF를 캡처했을 수 있다는 것입니다. 로 시작하는지 확인하면 조치echo -n "$out1" | xxd -p
가 표시됩니다0a
.make_ndx
오프로드 차량입니다. 이 명령은 \r을 전달하지 않고 내부적으로 삽입합니다. Bash 스크립트를 통해 할 수 있는 일은 없습니다(글쎄,mv
이름을 수정하는 것 외에는). 소스 코드가 있으면make_ndx
직접 수정할 수 있습니다. 그렇지 않으면 해당 코드를 지원하는 사람에게 문의해야 합니다.
여러 가지 방법으로 줄 끝이 혼합되어 있는지 확인할 수 있습니다. 예를 들어, xxd
bash 스크립트의 16진수 덤프를 얻는 경우 0x0d
CR(\r)입니다 . 0x0a
LF(\n)입니다. 파일에 CR이 표시되어서는 안 됩니다.