명령을 실행 중이고 아래 예에 표시된 것처럼 각 명령별로 구체적으로 그룹화하고 싶습니다. 인쇄를 시도했지만 echo -e '| $line'
파일에 포함된 텍스트를 출력하는 명령에만 영향을 미칩니다.
배경
원래 표시된 터미널 명령이 다음과 같은 비디오를 보았습니다.일부아래 예와 같이 "|"를 사용하여 그룹화합니다. 모든 출력이 각 줄의 시작 부분에 "|" 문자를 갖도록 .bashrc
/ 파일 에 대한 .bash_profile
함수를 사용자 정의하거나 생성 하려고 합니다.
토론도 찾았습니다.여기. 따라서 아마도 나는 STDERR 및 STDOUT에 대한 함수를 만들 것입니다(언급한 것처럼).여기).
예
+>system:~/sample
| No command 'sample' found, did you mean:
| Command 'yample' from package 'yample' (universe)
| Command 'ample' from package 'ample' (universe)
| sample: command not found
+>system:~/sudo apt-get update
| [sudo] password for system:
| Ign http://dl.google.com stable InRelease
| Hit http://dl.google.com stable Release.gpg
| Ign http://security.ubuntu.com trusty-security InRelease
| yadda yadda ...
+>system:~/
답변1
sed
명령을 통해 파이프 라인을 시도하여 ^
줄의 시작 부분( )을 원하는 접두사( )로 바꿀 수 있습니다 |
. 예를 들면 다음과 같습니다.
some_command | sed 's/^/| /'
이것은 간단한 명령에는 잘 작동하지만 더 복잡한 응용 프로그램이 커서를 사소하지 않은 방식으로 배치하고 여러 명령의 출력을 지연시키기 때문에 실패합니다(라인 버퍼링에서 더 큰 버퍼 영역을 사용하여 명령이 실행되었는지 확인하기 위해 전환). 표준 출력은 터미널입니다).
나는 일반적으로 이 접근 방식을 포기하고 그 대신에 눈에 띄는 쉘 프롬프트를 구성할 것을 권장합니다(굵게, 기울임꼴, 색상, 배경색, 특수 유니코드 문자 등 무엇이든 사용).
답변2
사람은 이런 일을 할 수 있습니다
LC_ALL=C cm='update-alternatives --display java'; i=0 ; \
while read -r line ; \
do let i++; printf "%s | %3d | %s\n" "$cm" "$i" "${line}" ; \
done < <($cm)
그러면 다음과 같은 출력이 제공됩니다.
update-alternatives --display java | 1 | java - auto mode
update-alternatives --display java | 2 | link best version is /usr/lib/jvm/java-11-openjdk-amd64/bin/java
update-alternatives --display java | 3 | link currently points to /usr/lib/jvm/java-11-openjdk-amd64/bin/java
update-alternatives --display java | 4 | link java is /usr/bin/java
update-alternatives --display java | 5 | slave java.1.gz is /usr/share/man/man1/java.1.gz
update-alternatives --display java | 6 | /usr/lib/jvm/java-11-openjdk-amd64/bin/java - priority 1111
update-alternatives --display java | 7 | slave java.1.gz: /usr/lib/jvm/java-11-openjdk-amd64/man/man1/java.1.gz
Bash에서 실행되는 모든 명령에 추가하는 솔루션이 없습니다. 다음과 같이 bash 함수로 무언가를 래핑할 수 있습니다.
#!/bin/bash
function ao() {
export LC_ALL=C
cm="$*";
i=0;
while read -r line ;
do
((i++));
printf "%s | %3d | %s\n" "$cm" "$i" "${line}";
done < <($cm )
}
이것을 파일에 저장하고 이름을 addoutput.txt로 지정하겠습니다. 그런 다음 이 파일을 가져옵니다.
. addoutput
그런 다음 모든 명령에서 이 기능을 사용할 수 있습니다.
ao yourcommand
@egmont가 언급했듯이 명령에 따라 출력이 원하는 것이 아닐 수도 있습니다. /dev/stderr로 전송된 출력에도 거기에 접두사가 붙은 코드가 없습니다.