영구 솔루션: 파일, 문자열이 명령줄에 혼합되지 않음

영구 솔루션: 파일, 문자열이 명령줄에 혼합되지 않음

파일에 개행 문자가 포함되어 있지 않습니다.

파일의 마지막 줄은 명령 프롬프트의 사용자 이름과 혼합됩니다.

문서:

line 1

시험:

user /: cat file
line 1user /:

제안된 해결 방법은 파일에 새 줄 종결자를 추가하는 것입니다.

그러한 해결책이 어떻게 올바른 것으로 간주될 수 있습니까?

이는 미래에 파일이 새로운 줄 종결자 없이 저장된다면 우리의 기분을 망칠 수 있다는 것을 의미합니다.

논리는 .. 아무것도 믿지 말라고 제안합니다. 하지만 당신이 옳아야합니다.

따라서 제가 정확하고 싶다면. 개행 여부에 관계없이 특정 문자열의 끝에 내 사용자 이름이 표시되도록 허용해서는 안 됩니다.

나는 그들에게 의존해서는 안 된다.

나는 나 자신의 존재가 되어야 한다.

내 사용자 이름이 "개행 없음" 파일이나 문자열의 희생양이 되지 않도록 하는 대체 솔루션이 있습니까?

"꼬리" 등과 같은 다른 기능이 제대로 작동하지 않게 되기 때문에 해결책이 존재하지 않을 수도 있습니까?

하지만 논리가 있어야 합니다.

몇 가지 논리를 찾고 있습니다.

답변1

그러한 해결책이 어떻게 올바른 것으로 간주될 수 있습니까?

목적은 cat실제로 파일을 표시하는 것이 아니기 때문입니다. 이것은 부작용입니다.

목적 cat스캠고양이아이낫파일(따라서 이름)입니다. 이는 각 파일을 차례로 읽고 각 파일의 내용을 표준 출력으로 출력하는 방식으로 수행되며, 필요한 경우 다시 리디렉션될 수 있습니다.

cat프로세스의 표준 출력이 기본적으로 터미널에 바인딩되어 있기 때문에 파일의 내용을 간단히 표시하는 데 자주 사용됩니다 . 호출기는 less다음 과 같은 전용 호출기를 사용하여 파일을 볼 수도 있습니다.more고의로파일을 보는 데 사용됩니다.

출력이나 각 파일의 내용을 개행 문자로 종료 하면 cat장기 계약이 파기됩니다. 실제로 파일을 연결하는 데 더 이상 유용하지 않습니다. 큰 파일을 여러 부분으로 분할한 다음 수정된 파일을 사용하여 해당 부분을 다시 결합하는 경우 cat결과는 시작할 때와 다를 수 있습니다.

UNIX 철학은 각 도구가 작은 일을 잘 수행하도록 하고, 서로 다른 도구를 결합하여 더 큰 컨텍스트를 형성할 수 있는 방식으로 수행하는 것임을 기억하십시오. 이것이 바로 명령을 실행하기 위해 원격 호스트에 ssh'ing하고, ssh 세션의 출력을 로컬 도구(awk, perl, grep 등)로 파이프하여 출력을 처리하고, 결과를 파이프하는 등의 작업을 수행할 수 있는 이유입니다. . 예를 들어 lpr하드 카피 인쇄물을 얻거나 less앞뒤로 스크롤하는 기능을 사용하여 찾아보세요. 모든 도구는 표준 출력에서 ​​표준 입력으로 이동하며 각 도구는 한 가지 작업만 수행하며 대부분의 간단한 도구(및 그다지 간단하지 않은 많은 도구)는 기본적으로 이 패턴을 따르거나 적절한 명령줄 매개변수를 사용하여 이 패턴을 따를 수 있습니다.

내 사용자 이름이 "개행 없음" 파일이나 문자열의 희생양이 되지 않도록 하는 대체 솔루션이 있습니까?

물론이죠. 아래와 같이 개행 문자로 시작하도록 프롬프트를 설정합니다.

$ printf 'hello' > $TMP/hello
$ PS1='\u \W: '
michael ~: cat $TMP/hello
hellomichael ~: PS1='\n\u \W: '

michael ~: cat $TMP/hello
hello
michael ~:

관련 정보