쉘 명령 출력을 다른 곤솔 쉘로 리디렉션


4

쉘 스크립트를 작성 중이며 스크립트에 명령을 작성하고 싶지만 다른 konsole 세션으로 출력을 리디렉션하고 싶습니다. (kde 사용)

linux  bash  shell  unix 

답변:


4

먼저 현재 tty 세션을 식별하는 번호를 찾으십시오. 숫자를 X다음 과 같이 고려하십시오 .

| terminal 1               | terminal 2                |
 ------------------------------------------------------
| $ tty                    | $                         |
| /dev/pts/X               |                           |

그런 다음 주어진 숫자를 사용하여 선택된 tty에 씁니다.

| terminal 1               | terminal 2                |
 ------------------------------------------------------
| $ tty                    | $ echo "foo" > /dev/pts/X |
| /dev/pts/X               |                           |

그리고 그것은 생산할 것이다 :

| terminal 1               | terminal 2                |
 ------------------------------------------------------
| $ tty                    | $ echo "foo" > /dev/pts/X |
| /dev/pts/X               |                           |
| foo                      |                           |

3

다른 세션에서 나오는 로그 파일로 출력을 파이프 할 수 있습니다.

다른 터미널에서 :

touch foo && tail -f foo

"메인"터미널에서 :

script.sh > foo

0

현재있는 터미널 대신 터미널 출력을 파일로 인쇄하십시오.

commands >>outputfile

새 터미널에서는 tail을 사용하여 출력 파일의 내용을 표시하고 더 많은 텍스트가 추가되면 자동으로 업데이트하십시오.

tail -f outputfile

0

늦었지만 어쩌면 더 좋을 것입니다 ... :-)

mkfifo ~/MyOutput           # Create the FIFO (Special file) 

./MyScript.sh > ~/MyOutput  # In the terminal/console 1
cat ~/MyOutput              # In another tty/console

부터 info coreutils 'mkfifo invocation':

"FIFO"는 독립적 인 프로세스가 통신 할 수있는 특수 파일 유형입니다. 하나의 프로세스는 쓰기를 위해 FIFO 파일을 열고 다른 프로세스는 셸 또는 다른 곳에서 일반적인 익명 파이프를 사용하여 데이터를 흐르게 할 수 있습니다.

사이드 노트 :

  • 홈 디렉토리에없는 FIFO를 만드는 것이 좋습니다 :-)
  • FIFO동일한 프로세스 (std out, std err)에 대해 둘 이상을 가질 수 있습니다 .
  • 덤프를 요청하지 않을 때까지 FIFOs모든 출력을 보유합니다.
    처음 물어 보면 모두 플러시 합니다.
  • 다른 파일로 리디렉션 (또는 추가) 할 수 있습니다 cat MyOutput >> NewRealFile
  • cat MyOutput다른 터미널에서도 사용할 수 있습니다 !
  • 경고 : 출력을 동일하게 리디렉션하기 위해 2 개의 다른 프로그램 (또는 인스턴스)에 요청 FIFOs하면 플럭스가 병합됩니다 ( 해당 라인이 어떤 프로그램과 다른지 구분 하는 우선적 인 방법은 없음).
  • 경고 : 두 번 이상 요청하면 (다른 터미널에서) 요청마다 출력을 분할하는 각 요청마다 한 줄씩 줄 것입니다.
  • 더 복잡한 용도로 사용할 수 있습니다 . 프로그램을 올바르게 시작하고 나중에 실행중인 출력 (stdout 및 stderr)을 리디렉션하는 방법은 무엇입니까?

0

tty각 터미널 에서 명령을 사용하여 식별하십시오.

$ tty
/dev/pts/0

$ tty
/dev/pts/1

이 TTY를 가정하면 첫 번째 stdout을 두 번째 stdout으로 리디렉션하려면 첫 번째 터미널에서 다음을 실행하십시오.

exec 1>/dev/pts/1

참고 : 이제 모든 명령 출력 이 pts / 1에 표시됩니다.

pts / 0의 기본 동작 stdout을 복원하려면 다음을 수행하십시오.

exec 1>/dev/pts/0

데모는 이 비디오 를 참조하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.