apt-cache 정책 출력이 파이프되지 않는 이유는 무엇입니까?


12

이유를 알 수 없습니다

$ apt-cache policy foo
N: Unable to locate package foo

그러나

$ apt-cache policy foo 2>&1 | grep .

비었다.

후자의 부름에서 나는 어디에서 잘못된 가정을하고 있는가?

원래 작업 : apt-cache policy아마도 출력 을 처리해야합니다 :-)

UPD :

foo내 예에서 사용 된 색인 은 색인에 존재하지 않는 패키지 이름으로 대체 될 수 있습니다 apt-get.

UPD 2 :

해결 방법이 있습니다. 솔루션이 작동하지 않는 +50이유를 설명하는 사람에게는 추가 현상금이 수여됩니다 2>&1.


# apt-cache policy vim 2>&1 |grep . vim: Installed: 2:7.4.712-2 Candidate: 2:7.4.712-2 Version table: *** 2:7.4.712-2 0 500 http://ftp.debian.org/debian/ sid/main amd64 Packages 100 /var/lib/dpkg/status
페르시아 걸프

1
@MohsenPahlevanzadeh 맞아, 이제 내가 제공 한 정확한 전화 (패키지 이름)를 사용해보십시오 :-)
zerkms

3
@MohsenPahlevanzadeh 그래서? 죄송합니다. 질문 (및 제목)을 읽었습니까?
zerkms

2
@MohsenPahlevanzadeh 동일하지 않습니다 (가까운 것도 아닙니다)
zerkms

1
나는 실행 strace apt-cache policy foo 2>&1하고 시스템 호출이 ioctl(1, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, {B38400 opost isig icanon echo ...}) = 0나는 문제가 있기 때문에이 호출 1 (표준 출력)의 생각은. 나는 그것이 더 이상 tty에게 쓰여지지 않았다는 것을 의미합니다
Esref

답변:



10

에 리디렉션에 대한 약간의 불쾌한 행동이있는 것 같습니다 apt-cache. 그러나 stdout과 stderr교체 하여 사기꾼을 속일 수 있습니다 !

이것을 시도하십시오, 그것은 작동해야합니다 :

apt-cache policy foo 3>&1 1>&2 2>&3 3>&- | grep .

7

strace apt-cache policy foo 2>&1명령 을 실행 하면 라인을 볼 수 있습니다ioctl(1, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, {B38400 opost isig icanon echo ...}) = 0

이 명령은 1 (stdout)을 조작하므로 1은 더 이상 stdout에 기록되지 않습니다. 2를 1로 리디렉션하면 둘 다 손실됩니다.

편집 : 다음은 apt-cache 소스 코드의 코드 샘플입니다.

// Deal with stdout not being a tty
   if (!isatty(STDOUT_FILENO) && _config->FindI("quiet", -1) == -1)
      _config->Set("quiet","1");

괜찮아. 둘 다 잡을 방법이 있습니까?
zerkms

1
@Mr_Mig의 답변과 다른 방법을 찾지 못했습니다. (내 것은 apt-cache policy foo 1>&2 2>&1 | grep .) 그러나 나는 소스 코드 apt-cache : apt-cache :) // stdout이 tty가 아닌 것을 다루는 경우 if (! isatty (STDOUT_FILENO) && _config-> FindI ( "quiet", -1) ==- 1) _config-> Set ( "quiet", "1");
Esref

Btw, 나는 또한 몇 분 전에 소스에서 같은 지점을 누군가에게 지적했습니다 :-) 그리고 잠재적으로 더 나은 솔루션 script -c "sudo apt-cache policy foo" | grep Unable은 설치가 필요합니다 script. 충고대로 - 나는 (SE 이전을 할 수 있도록하지 않는) 2 일 내에 여기에 50을 넣어 것입니다
zerkms

2
@Esref "소스 코드 apt-cache ..."에 대한 귀하의 의견이 답이되어야하므로 여기에 추가하십시오. +1. :
Faheem Mitha

오 신, 더 이상 +50 현상금 옵션이 없습니다 :-(
zerkms

3

"더 나은"솔루션은 script유틸리티 를 사용하는 것입니다 .

script -c "apt-cache policy foo" /dev/null | grep .

그렇게하면 모든 출력을 가로 채서로 전달합니다 stdout.

유일한 단점은 script아직 설치 하지 않은 경우 설치해야한다는 것 입니다. 우분투에서는 bsdutils패키지로 제공됩니다 .

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