ssh를 통해 stdout 리디렉션


17

나는 달리고 싶다

something > file

ssh를 통해 원격 시스템에서 실행하지만

ssh host something > file

리디렉션은 다음과 같이 로컬로 실행됩니다. ssh etc > file

나는 그것을 시도했습니다 '또는 ''또는 dd또는 파이프 |대신에, 그러나 나는 일에 그것을 얻을 수 없습니다. 이것을 어떻게 할 수 있습니까?


답변:


11

시험:

ssh host 'something > file'

다음은 리디렉션, 파이프 및 따옴표를 처리하는 방법에 대한 고안된 데모입니다.

ssh host date -d yesterday \| awk "'{print $1}'" \> 'file" "with\ spaces.out'

파이프와 방향 재 지정은 전체 외부 인용 부호 세트에 포함되지 않고 이스케이프 처리되므로 한 단계의 인용 부호를 벗어날 필요가 줄어 듭니다. AWK 명령의 작은 따옴표는 큰 따옴표로 묶습니다. 파일 이름은 같은 방식으로 보호 할 수 있지만 여기서는 작은 따옴표가 큰 따옴표와 이스케이프를 보호하는 방법을 보여줍니다.


고맙습니다-작동합니다!
franziskus

2
ssh는 명령 행의 해당 부분을 쉘로 전달하므로 해당 부분이 필요하지 않습니다 sh -c.
Jander

명령에 큰 따옴표와 작은 따옴표가 이미 있으면 어떻게합니까? 주제가 너무 멀리 떨어져 있지 않다면 다른 사람들이 그 방법을 알고 싶어 할 것입니다.
미로

1
@ labyrinth : 몇 가지 아이디어를 제공하는 예제를 추가했습니다. 로컬 쉘은 가장 바깥 쪽 따옴표 세트를 사용하고 원격 쉘은 다음 레벨을 소비합니다. 즉, 예를 들어 AWK는 표시된대로 인수에 따옴표가 표시되지 않지만 $1쉘에서 쉘 변수로 표시되지 않도록 보호됩니다. 그러나 따옴표의 순서가 반대라면 그렇지 않습니다.
추후 공지가있을 때까지 일시 중지되었습니다.

10

보다 간단하게 :

ssh host something > file

하다:

ssh host "something > file"

이 답변은 다른 답변보다 빠르기 때문에 허용되는 답변이어야합니다.
phil294

예, 2010 년에 받아 들여진 대답은 그리 좋지 않았습니다. 아마도이 답변과 일치하도록 2014 년에 변경되었습니다. unix.stackexchange.com/revisions/1631/1
Amala

3

제안 된 솔루션은 파이프와도 작동합니다.

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