কেন অ্যাপ-ক্যাশে নীতি আউটপুট পাইপ করা হচ্ছে না?


12

কেন পাচ্ছেনা

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

কিন্তু

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

খালি.

পরবর্তী কলটিতে আমি ভুল অনুমানটি কোথায় করছি?

আসল কাজ: আমার apt-cache policyসম্ভবত আউটপুটটি প্রক্রিয়া করা প্রয়োজন :-)

ইউপিডি :

fooআমার উদাহরণে ব্যবহৃত কোনও প্যাকেজের নামের সাথে প্রতিস্থাপিত হতে পারে যা আপনার সূচীতে বিদ্যমান নেইapt-get

ইউপিডি 2 :

একটি workaround সঙ্গে একটি উত্তর আছে। সমাধান +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
ফার্সিগাল্ফ 6'15

1
@ মোহসেনপাহাভানজাদেহ এটাই ঠিক, এখন আমি যে সঠিক কল (প্যাকেজের নাম) দিয়েছি তা চেষ্টা করুন :-)
জেরকামস

3
@ মোহসেনপাহলেভানজাদেহ তাই? আমি দুঃখিত, তবে আপনি কি নিশ্চিত যে প্রশ্নটি (এবং শিরোনাম) পড়েছেন?
zerkms

2
@ মোহসেনপাহেভানজাদেহ এটি সমান নয় (খুব কাছেও নয়)
জেরকামস

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

উত্তর:


11

যদি স্টাডআউটটি টিটিআই না হয় (যেমন এটি একটি নিয়মিত ফাইল বা পাইপ) এবং কোনও --quietবিকল্প নির্দিষ্ট না apt-cacheকরা থাকে তবে আপনি এটি পাস করেছেন এমনভাবে কাজ করে --quiet=1। একটি --quiet=0বিকল্প সমাধান এটি একটি বিকল্প পাস ।

$ apt-cache --quiet=0 policy foo 2>&1 | grep .
N: Unable to locate package foo


10

পুনঃনির্দেশগুলির জন্য কিছু প্রতারণামূলক আচরণ বলে মনে হচ্ছে apt-cache। তবে আমরা স্ট্যাডআউট এবং স্টডারকে অদলবদল করে একটি ঠকায় প্রতারণা করতে পারি !

এটি ব্যবহার করে দেখুন, এটি কাজ করা উচিত:

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 টি পুনর্নির্দেশ করেন তবে আপনি উভয়কেই হারিয়েছেন।

সম্পাদনা করুন: এ্যাপ-ক্যাশে উত্স কোড থেকে এখানে কিছু কোড নমুনা দেওয়া হয়েছে:

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

ঠিক আছে. তাদের দু'জনকে ধরার কোনও উপায়?
zerkms

1
@ মিঃ_মিগের উত্তর ছাড়া আর কোনও উপায় আমি খুঁজে পেলাম না। (আমার ছিল apt-cache policy foo 1>&2 2>&1 | grep .) তবে আমি খুঁজে পেলাম যে উত্স কোডে অ্যাপ্ট-ক্যাশে :) // স্টাডাউটটি টিটিটি না হওয়ার সাথে চুক্তি করুন যদি (! ইসতিটি (এসটিডিউএফএফএনএনও) && _config-> FindI ("শান্ত", -1) == - 1) _ কনফিগ-> সেট ("শান্ত", "1");
এসেরেফ

বিটিডব্লিউ, আমিও কয়েক মিনিট আগে আমার উত্সগুলিতে একই পয়েন্টটির দিকে ইঙ্গিত করেছিল :-) এবং একটি সম্ভাব্যতর উন্নত সমাধান script -c "sudo apt-cache policy foo" | grep Unableযার জন্য scriptযদিও ইনস্টল করা প্রয়োজন । পরামর্শ হিসাবে - আমি এখানে 2 দিনের মধ্যে +50 রাখব (এসই এটি আগে করতে দেয় না)
জের্কমস

2
@ এসরিফ "আপনার উত্স কোডটি অ্যাপ্ট-ক্যাশে ..." সম্পর্কে আপনার মন্তব্যটি উত্তরে থাকা উচিত, সুতরাং দয়া করে এটি এখানে যুক্ত করুন। +1 টি। :
ফাহিম মিঠা

ওহ ,
শ্বর,

3

একটি "ভাল" সমাধানটি কোনও scriptইউটিলিটি ব্যবহার করা হবে :

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

এইভাবে এটি সমস্ত আউটপুটকে বাধা দেয় এবং এটিকে ফরোয়ার্ড করে stdout

একমাত্র অপূর্ণতা হ'ল এটি ইনস্টল করা দরকার scriptযদি আপনার কাছে এটি এখনও না থাকে। উবুন্টিতে এটি bsdutilsপ্যাকেজ দ্বারা সরবরাহ করা হয় ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.