런타임시 명령의 각 출력 접두사


16

모듈 식 스크립트를 만들려고합니다. 단일 스크립트에서 호출되는 여러 스크립트 / 명령이 있습니다.
각 개별 명령의 출력 앞에 접두사를 붙이고 싶습니다.

예 :

내 파일은 allcommands.sh / command1.sh / command2.sh입니다.

command1.sh 출력
file exists
file moved

command2.sh 출력
file copied
file emptied

allcommands.sh 는 스크립트 command1.shcommand2.sh를 실행합니다.

이 두 스크립트의 각 출력 앞에 다음과 같이 붙이고 싶습니다.
[command1] file exists
[command1] file moved
[command2] file copied
[command2] file emptied


이를 통해 각 명령을 실행 해보십시오sed "s/\^/command1 /"
j_kubik

내가 제공 한 정보를 예로 들어주세요. 나는 sed기능을 실제로 이해하지 못한다 . 죄송 해요.
Ivan Dokov

답변:


21

allcommands.sh에서 수행중인 작업은 다음과 같습니다.

command1.sh
command2.sh

그냥

command1.sh | sed "s/^/[command1] /"
command2.sh | sed "s/^/[command2] /"

9

최소한의 예 allcommands.sh:

#!/bin/bash
for i in command{1,2}.sh; do
    ./"$i" | sed 's/^/['"${i%.sh}"'] /'
done

원하는 문자열을 사용 command1.sh하여 command2.sh실행 가능한 디렉토리와 동일한 디렉토리 echo에 쉘 출력을 제공합니다.

$ ./command1.sh 
file exists
file moved
$ ./command2.sh 
file copied
file emptied
$ ./allcommands.sh 
[command1] file exists
[command1] file moved
[command2] file copied
[command2] file emptied

빠른 sed고장

sed 's/^/['"${i%.sh}"'] /'
  • s/ "정규 패턴 일치 및 교체"모드로 들어갑니다.
  • ^/ "모든 줄의 시작과 일치"를 의미
  • ${i%.sh}쉘 컨텍스트에서 발생하며 " $i, 그러나 접미사 제거 .sh"
  • ['"${i%.sh}"'] /처음에는 a를 인쇄 한 [다음 인용 된 컨텍스트를 종료하여 $i쉘 에서 변수를 가져온 다음 ]및 공백으로 다시 입력 합니다.

설명을 주셔서 감사합니다. 귀하의 답변은 실제로 도움이되었지만 @j_kubik의 예는 내가 필요한 것입니다.
Ivan Dokov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.