STDOUT이없는 tee 명령의 대안


36

| sudo tee FILENAME수퍼 유저 권한이 필요한 파일에 대해 글을 쓰거나 추가 할 수 있도록 사용 하고 있습니다.

내가 왜 그것이 어떤 상황에서 도움이되는지 이해하지만, 그것은 tee또한 STDOUT으로 입력을 다시 보낸다. 나는 실제로 그 부분을 tee유용하게 사용하지 못했다 . 대부분의 경우이 기능을 사용하면 추가 단계를 거치지 않고 수동으로 침묵하지 않으면 내 화면이 원치 않는 지터로 채워질 수 있습니다 tee 1> /dev/null.

내 질문 : 커맨드 arround가있는 것과 똑같은 일을 tee하지만 기본적으로 STDOUT에 아무 것도 출력하지 않습니까?


tee함께 교체 cat >filename하면 원하는 결과를 얻을 수 있습니까?
톱밥

4
cat파일 자체에 쓰지 않습니다. 그리고 >현재 사용자가 파일을 쓸 수 없으므로 운영자가 작동하지 않습니다. 그래서, 조금 도움이되지 않습니다. 그리고 2 초마다 댓글의 의미를 완전히 바꾸려면 중지하십시오. 대신 새 것을 만드십시오.
aef,

| sudo tee FILENAME함께 교체 | sudo cat >filename하면 원하는 결과를 얻을 수 있습니까?
톱밥

4
아니요, >운영자는 현재 쉘 사용자를 사용하여 파일에 기록합니다. 이 사용자에게는 필요한 사용 권한이 없습니다. cat그것 때문에 전혀 쓸모가 없습니다.
aef

답변:


28

또 다른 옵션은 물건을 파이프로 연결하는 것을 피하고 나서 다시 연결하는 것 /dev/zero입니다.

sudo command | sudo dd of=FILENAME

1
정확히 내가 무엇을 찾고 있었는지. 대단히 감사합니다.
aef

4
superuser.com/a/850294/68284 는 추가 oflag=append conv=notrunc에 사용할 추가 옵션을 설명합니다 dd.
aef

6

dd솔루션은 아직 표준 출력에 쓰레기를 인쇄 :

$ ls | sudo dd of=FILENAME
0+1 records in
0+1 records out
459 bytes (459 B) copied, 8.2492e-05 s, 5.6 MB/s

status옵션 사용을 피할 수 있습니다 .

command | sudo dd status=none of=FILENAME

또 다른 흥미로운 가능성 (Linux 용) :

command | sudo cp /dev/stdin FILENAME

TTY 입력을 파일에 복사하려면 다음과 같이하십시오.

sudo cp /dev/tty FILENAME

티가 너무 나빠서 stdout을 억제 할 수있는 옵션이 없습니다.


4

스크립트를 사용할 수 있습니다. 즉 $HOME/bin/stee, ie 0tee또는 이와 비슷한 것을 넣어 라 .

#!/bin/bash

argv=
while [[ "$1" =~ ^- ]]; do
    argv+=" $1"
    shift
done

sudo tee $argv "$1" > /dev/null

#!/bin/bash

sudo tee "$@" > /dev/null

실행 가능하게 만드십시오.

$ chmod 755 stee

이제 할 :

$ ls -la | stee -a / root / foo


1
스크립트를 작성하고 모든 시스템에 배포하는 작업은 원했던 바가 아니지만 누군가 기존 툴을 사용할 때까지는 솔루션과 함께 할 것입니다.
aef

2
과연. 나 자신을보고 싶습니다. 나는 오랫동안 C에서 당신이 묻는 것을했던 프로그램을 썼지 만, 오랜 시간이 지나고 잊혀졌습니다. 그 당시에는 전혀 관심이 없었습니다. 그러나 다시 나는 실제로 그것을 많이 광고하지 않았다.
Luca Stein,

2

전체 명령을 sudo로 래핑 할 수 있으므로 셸 자체와 리디렉션은 다음과 같이 수행됩니다 root.

sudo sh -c 'do_something > FILENAME'

-1

직접 할 수있는 프로그램이 없습니다 (이 방법이 유용 할 수있는 유일한 시간입니다).하지만 자신 만의 프로그램을 쉽게 작성할 수 있습니다. 프로그램하고 싶지 않다면, 똑같은 일을하는 간단한 쉘 스크립트를 작성할 수도 있습니다 : cat > $1. 이는 sudo가 리디렉션을 포함한 전체 스크립트에 적용될 것이므로 인라인으로 배치하는 것과 다릅니다 (톱밥 제안).


-2

내가 아는 것은 조금 늦었지만 그런 경우 ( '평평한'표준 출력과 임시 파일이 필요할 때) 내가하는 일은 다음과 같다.

tee whatever | grep -v ""

이 명령이 무엇을하는지 자세히 설명해 주시겠습니까?
Vylix

tee> / dev / null과 동일하지만 아무것도 일치하지 않는 grep로 파이핑합니다.
00prometheus

출력을 리다이렉트하는 것보다 훨씬 해킹당하는 것 같고 /dev/null명령을 더 짧게하지도 않습니다. 원래 방법 대신이 방법을 사용하면 어떤 이점이 있습니까?
흉악한
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.