실행 된 명령에서 출력 행 앞에 탭을 삽입하는 방법


16

간단한 질문입니다. Ubuntu 16.04 LTS에서 출력을 탭할 수 있습니까? 아래에서 두 가지 이미지를 만들어서 이것이 의미하는 바를 설명합니다.

img1

img2


1
명령 출력을 다른 명령을 통해 파이프해야 YOUR COMMAND | indent하거나 명령 앞에 다른 명령을 입력 해야하는 경우 (밑줄 만 가능) 괜찮 _ YOUR COMMAND습니까?
바이트 사령관

1
@ByteCommander 나는 그것을 고려했지만 사용하기 쉽고 콘솔 출력을 읽기 쉽도록하기 위해 이것을하고 있습니다. 따라서 모든 명령을 파이핑하는 것이 해결책이라고 생각하지 않습니다. 답변 주셔서 감사합니다 그리고 그래도 편집!
Alex Ng

1
[텍스트 출력의 스크린 샷을 게시하지 마십시오. ] ( meta.askubuntu.com/q/8713/85695 )
terdon

답변:


15

파일 디스크립터를 사용하여 이와 같은 작업을 수행 할 수 있습니다.

  1. 나중에 출력 할 수 있도록 현재 출력 설명자를 저장하십시오.

    exec 3>&1
  2. 출력 스트림을 탭을 삽입 하는 프로세스 대체로 경로 재 지정하십시오 ( 예 :

    exec 1> >(paste /dev/null -)

이 시점에서 표준 출력에 쓰는 프로세스 paste는 시작시 탭을 삽입 하는 명령을 통해 출력이 '필터링'됩니다 .

  1. 완료되면 저장된 파일 디스크립터를 복원하고 임시 디스크립터를 닫아서 정상적인 동작을 재개 할 수 있습니다

    exec 1>&3 3>&-

답변 해 주셔서 감사합니다. 이것은 완벽하지는 않지만 솔루션에 가장 근접한 것입니다.
Alex Ng

@AlexNg upvote에 감사드립니다-당신이 요청한 것을 구체적으로하지 않는 방법은 무엇입니까? 알려 주시면 개선하려고 노력하겠습니다
steeldriver

몇 가지 예를 들자면 : 명령을 입력 한 후 'php -v', 'hostname'등과 같은 일부 명령이 의도 한대로 작동합니다. 그러나 'echo Hello World'와 같은 명령을 사용하는 경우 출력이 입력과 나란히 표시되고 다음 명령을 입력 할 때 입력 시각적 모양에 악영향을 미칩니다. 'asdasd'와 같은 유효하지 않은 명령을 입력 할 때와 같이 일부 다른 명령도 태빙 프로세스의 영향을받지 않습니다.
Alex Ng

마지막으로, 변경되는 출력을 올바르게 표시하지 않습니다 (이를 올바르게 설명하는 방법을 모르면 사과하십시오). 예를 들어, 'apt-get update'명령을 사용하면 태빙 프로세스없이 콘솔과 비교할 때 눈에 띄는 차이가 있습니다.
Alex Ng

문제는이 접근법이 STDOUT (스트림 1) 만 처리하고 STDERR (스트림 2)는 처리하지 않는다는 것입니다. 또한 less예를 들어 출력을 스크롤 할 수 있도록 유사한 툴을 사용하는 프로그램의 출력을 차단합니다 man.
바이트 사령관

9

나는이 대답이 당신에게 최적이 아니라는 것을 이해하지만, 간단한 이름 _(또는 아직 사용되지 않은 다른 것)으로 Bash 함수를 만들 수 있습니다.이 명령은 인수로 가져오고 탭으로 모든 출력을 들여 쓰기합니다.

예를 들면 :

$ _ lsb_release -a
        No LSB modules are available.
        Distributor ID: Ubuntu
        Description:    Ubuntu 16.04 LTS
        Release:    16.04
        Codename:   xenial

이 함수의 코드는 다음과 같습니다.

_(){ sed "s/^/\t/" <($*); }

~/.bashrc다음을 실행하여 사용자의 모든 Bash 세션에서 사용할 수 있도록 파일에 파일 을 추가 할 수 있습니다 .

echo '_(){ sed "s/^/\t/" <($*); }' >> ~/.bashrc

모든 사용자가 사용할 수있게하려면 /etc/bash.bashrc대신 추가하십시오 (관리자 권한 필요).

echo '_(){ sed "s/^/\t/" <($*); }' | sudo tee -a /etc/bash.bashrc

또는 /usr/local/bin/_Bash 기능을 사용하지 않고 모든 사용자에 대해 다음과 같은 내용으로 스크립트 파일을 작성 하여 동일한 결과를 얻을 수도 있습니다 .

#!/bin/bash
sed "s/^/\t/" <($*)

파일을 저장 한 후 스크립트를 실행 가능하게 만들어야합니다.

sudo chmod +x /usr/local/bin/_

5

echo특히, 당신은 같은 백 슬래시 이스케이프 해석 할 수 있습니다 \t(A 탭 정지를 로) -e스위치 :

echo -e "\tHello World"

그러나 모든 명령의 출력을 그런 식으로 수정하는 것은 불가능할 것입니다. 읽기 쉬운 것이 목표라면 다음과 같이 명령 프롬프트의 모양 (예 : 채색)을 사용자 정의하는 것이 좋습니다.

환경 변수의 내용을 변경하여 프롬프트를 사용자 정의 할 수 있습니다 PS1. 위 스크린 샷 의 블로그 게시물 에서이를 수행하는 방법에 대한 작은 예를 볼 수 있습니다 . 소위 ANSI 이스케이프 시퀀스를 사용하는 방법,보다 편안한 도구 사용 방법, 새로운 터미널에서 기본적으로 변경 사항을 적용하는 방법 등은이 답변의 범위를 벗어납니다. 그러나이 기술을 사용하기로 결정하면 웹에 대한 많은 자습서와 추가 정보가 있습니다.


답변 주셔서 감사합니다,하지만 난 이미 PS1을 내 취향으로 변경했습니다.
Alex Ng
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.