2012-08-31 2 views
3

stdout을 파일로 리디렉션하는 방법을 알고 있지만 stdout을 프로세스 (Linux 환경)로 리디렉션 할 수 있습니까?실행중인 프로세스로 stdout 리디렉션

예를 들어 "~^Z"를 통해 활성 SSH 세션을 백그라운드로 이동하면 내 로컬 호스트에서 다른 프로그램을 시작하고 표준 출력을 SSH 세션으로 리디렉션 할 수 있습니까?

감사합니다.

+0

나는 명명 된 파이프를 사용하여 게임하려고하는 이상한 게임을 생각해 낼 수 있습니다.하지만 꽤 좋지는 않을 것입니다. –

+0

이것은 준 관련이 없지만이 기사를 충분히 추천 할 수는 없습니다. http://www.linusakesson.net/programming/tty/index.php. 왜 아래 명명 된 파이프 솔루션이 작동하는지 설명합니다. – nsfyn55

답변

3

때때로

echo "something" > /proc/pid-of-process/fd/0 

작품 같은 트릭하지만이되고 가상에 연결하는 경우, 그것은하지 않습니다.

그래서 여기에 원하는 것을 할 수있는 한 가지 방법이 있습니다.

  1. ** 인증/암호없는 로그인을 사용하도록 SSH 연결을 구성하십시오.
  2. 는 명명 된 파이프 (예 : mkfifo mypipe)
  3. 만들기
  4. 파이프에서 읽고 예를 들면, SSH 과정에 그것을 전달하는

    사용 꼬리 :

    tail -f mypipe | ssh -t -t [email protected]

  5. 전송하는 것은 당신이에 가고 싶어 어떤 명명 된 파이프에 SSH 세션, 예를 들면 : 당신이 서로 파이프 물건이 필요하면 그래서

    echo "ls -l" > mypipe

    프로그램, 당신은 단지 당신이 완료

    ./my-program > /path/to/mypipe

  6. 할 것입니다.

일부 노트 :

  1. ** 선택 사항이지만, 그렇게하지 않으면, 당신은 당신이에 SSH 세션을 시작 단말기에 암호를 입력해야합니다, 당신은 통과 할 수 파이프를 통해. 사실, 시도해 보면 SSH 연결이 완료되면 파이프를 통과하는 일반 텍스트로 표시됩니다.
  2. SSH 세션은 이제 명명 된 파이프만큼 안전합니다. 그냥 머리를 올려.
  3. 일단 연결하면 원래 터미널에서 SSH 세션을 사용할 수 없습니다. 명명 된 파이프를 사용해야합니다.
  4. 원래 단말기에서 SSH 프로세스를 항상 Ctrl + C로 눌러서 단말기를 종료하고 단말기의 기능을 복원 할 수 있습니다.
  5. 모든 출력이 원래 터미널에 표시됩니다. 아마도 분명하지만 필자는이를 지적하고자했습니다.
  6. tail에 대한 -f 옵션은 파이프가 비어있을 때 SSH 프로세스가 EOF를받지 못하게하기 위해 필요합니다. 파이프가 닫히는 것을 방지하는 다른 방법이 있지만 이것은 제 의견으로는 가장 쉬운 방법입니다.
  7. ssh에 대한 -t -t 옵션은 강제로 tty 할당을 강제합니다. 그렇지 않으면 stdin이 (가) 당신의 경우에 파이프되어 있기 때문에 불평 할 것입니다.
  8. 마지막으로, 당신이 원하는 것을 할 수있는 더 좋은 방법이 거의 있습니다 - 이것이 중대한 것이 든 장기적인 것이 든 그것을 찾는 것을 고려해야합니다.
관련 문제