STDOUT 없이 tee 명령의 대안

STDOUT 없이 tee 명령의 대안

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

어떤 상황에서는 이것이 도움이 되는 이유를 이해하고 tee입력을 다시 STDOUT으로 보내지만 실제로 해당 부분을 tee유용한 용도로 사용한 적이 없습니다. 대부분의 상황에서 이 기능은 추가 단계를 수행하지 않고 수동으로 tee 1> /dev/null.

tee내 질문: 와 정확히 동일한 작업을 수행 하지만 기본적으로 STDOUT에 아무 것도 출력하지 않는 arround 명령이 있습니까 ?

답변1

물건을 다시 파이핑하는 것을 피하는 또 다른 옵션은 다음과 같습니다 /dev/zero.

sudo command | sudo dd of=FILENAME

답변2

솔루션은 dd여전히 ​​stderr에 정크를 인쇄합니다.

$ 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

안타깝게도 tee에는 stdout을 억제하는 옵션이 없습니다.

답변3

스크립트를 사용할 수 있습니다. 즉 $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 스테이

이제 다음을 수행하십시오.

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

답변4

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

sudo sh -c 'do_something > FILENAME'

관련 정보