আমি কীভাবে কার্ল -v এর আউটপুটটি পাইপ করব বা পুনঃনির্দেশ করব?


117

কিছু কারণে আউটপুট সর্বদা টার্মিনালে মুদ্রিত হয়ে যায়, আমি এটি 2> বা> বা | এর মাধ্যমে পুনর্নির্দেশ করি না কেন। এই কাছাকাছি পেতে একটি উপায় আছে? এটি কেন ঘটছে?


3
যদি আমি এটি করি curl -v url 2>&1, ত্রুটিগুলি সঠিকভাবে আমার জন্য স্ট্যান্ডার্ড আউটপুটে পুনঃনির্দেশিত।
জোশ লি

উত্তর:


134

-sঅগ্রগতি মিটার অপসারণের জন্য (নীরব) বিকল্পটি যুক্ত করুন, তারপরে প্রতিক্রিয়া বডির মতো একই এফডিতে ভার্বোজ আউটপুট পেতে স্টার্ডারকে স্টার্ডারে পুনর্নির্দেশ করুন

curl -vs google.com 2>&1 | less

3
এটি বেশিরভাগ ওয়েবসাইটের জন্য কাজ করে তবে কোনও কারণে আমার মেশিনে লোকাল সার্ভার এখনও পুরো আউটপুট প্রিন্ট করে, এমনকি আমি `2> & 1 করলেও গ্রেপ এসিডেফাসডফাসডফসডফডফস` বা এ জাতীয় কিছু। শিরোনাম সহ সম্পূর্ণ আউটপুট এখনও কনসোলে প্রদর্শিত হবে। আমার প্রয়োজন মতো কিছু ডেটা বের করার জন্য আমি কি আরও কিছু স্ট্রিম গ্রিপে পাইপ করতে পারি?
25:51 11:53

আপনি আসলে কোন তথ্যটি উত্তোলনের চেষ্টা করছেন এবং কোন তথ্যটি আপনি ফেলে দিতে চান। আমি আপনার প্রশ্নের অর্থ বুঝতে পেরেছি যে আপনি স্টাডাউটের নির্দেশিত -v এর সমস্ত আউটপুট চান।
সিঙ্গেলাইজেশন ইলিমিনেশন

আমি কিছু কুকি প্রক্রিয়া করতে চাই (মূলত কুকিজ থেকে কিছু তথ্য গ্রেপ করুন এবং কিছু অন্যান্য জিনিস করুন)। হ্যাঁ, আমি চাই সমস্ত কিছু স্ট্যান্ডে যেতে হবে, তাই পাইপগুলির মাধ্যমে আমি যা চাই তা প্রক্রিয়া করতে পারি। বর্তমানে কিছু আউটপুট কেবল কনসোলে প্রদর্শিত হবে এবং পুনর্নির্দেশ করা অসম্ভব বলে মনে হচ্ছে এবং কেন তা আমি নিশ্চিত নই।
jonderry

আপনি ক্যাপচার করতে চান এমন পর্দায় প্রদর্শিত আউটপুটটির একটি স্ক্রিনশট পোস্ট করতে পারেন? আমি জানি না আপনি কী ধরণের আউটপুট সম্ভবত দেখছেন যা সম্ভবত এড়ানো যেতে পারে 2>&1
সিঙ্গেলাইজেশন ইলিমিনেশন

এটি অন্য ওয়েবসাইটের মতো কেবল একই ধরণের আউটপুট। পার্থক্যটি হ'ল সার্ভারটি স্থানীয়ভাবে চলছে। কোনও প্রোগ্রাম কনসোলে মুদ্রণের জন্য কি কোনও উপায় আছে তবে সেই পাঠ্যটি স্টাউট / স্টেরারের দ্বারা ক্যাপচার করা হয়নি?
জন্ড্রি

115

আপনার ইউআরএলের সম্ভবত এটিতে অ্যাম্পারস্যান্ড রয়েছে। আমারও এই সমস্যাটি ছিল এবং আমি বুঝতে পেরেছিলাম যে আমার ইউআরএলটি অ্যাম্পারস্যান্ডে পূর্ণ ছিল (সিজিআই ভেরিয়েবলগুলি পেরিয়ে যাচ্ছিল) এবং তাই সবকিছু অদ্ভুতভাবে পটভূমিতে প্রেরণ করা হচ্ছিল এবং এভাবে সঠিকভাবে পুনঃনির্দেশ করা হয়নি। আপনি যদি ইউআরএল এর চারপাশে কোটস রাখেন তবে এটি ঠিক হয়ে যাবে।


1
আমারও একই সমস্যা ছিল। 2> & 1 এর প্রয়োজন নেই যাতে আমি আউটপুট এবং সংযোগ লগটি আলাদা রাখতে পারি। ধন্যবাদ রোডনোটেকেন।
কোর্নিয়ান

3
প্রেমের স্ট্যাক-ও ... আমি এই কিউটি পেয়েছি এবং ইউআরএলটিতে অ্যাম্পারস্যান্ডগুলির উল্লেখ পেয়েছি। এটি আমার চারপাশে কোট রেখেছিল, এবং সমস্যা সমাধান হয়েছে।
পলব

2
উদ্ধৃতিগুলি আমার জন্য কৌশলটি করেছে। আমার মনে হয়েছিল কার্ল অন্য থ্রেডে চালাচ্ছে। অনেক ধন্যবাদ !
vdolez

1
আপনি আমার সন্ধ্যা
বাঁচানোর

যীশু, কার্ল এ কী ভয়ানক বাগ bu খুব কমপক্ষে এটি ব্যর্থ হওয়া বা একটি সতর্কতা দেওয়া উচিত। আপনার 2012 এর উত্তর 2018 সালে আমাকে সহায়তা করেছে I আমি আপনার উত্তরটি না আসা পর্যন্ত এটি সমাধান করতে 30 মিনিট সময় নিয়েছি। ধন্যবাদ!
মাওভিস লেডফোর্ড

29

উপরের উত্তরটি আমার পক্ষে কাজ করে নি, শেষ পর্যন্ত এই বাক্য গঠনটি কী ছিল:

curl https://${URL} &> /dev/stdout | tee -a ${LOG}

টি স্ক্রিনে আউটপুট রাখে, তবে এটি আমার লগে যুক্ত করে।


1
&> /dev/stdoutঅবশ্যই অনুপস্থিত অংশ ছিল, ধন্যবাদ
ম্যাটস্পেইন

10

আপনার যদি কোনও ফাইলে আউটপুট প্রয়োজন হয় তবে আপনি পুনর্নির্দেশটি ব্যবহার করতে পারেন:

curl https://vi.stackexchange.com/ -vs >curl-output.txt 2>&1

দয়া করে নিশ্চিত করুন যে ফ্লিপ করবেন না >curl-output.txtএবং 2>&1যা বাশের পুনঃনির্দেশ আচরণের কারণে কাজ করবে না ।


3

আমি একই জিনিসটি পেয়েছি: কার্ল নিজে থেকে মুদ্রণ করবে STDOUT এ, তবে অন্য প্রোগ্রামে পাইপ করা যায়নি।

প্রথমে, আমি ভেবেছিলাম আমি আউটপুট প্রতিধ্বনি করতে xargs ব্যবহার করে এটি সমাধান করেছি:

curl -s ... <url> | xargs -0 echo | ...

কিন্তু তারপরে, মন্তব্যে উল্লিখিত হিসাবে, এটি xargs অংশ ব্যতীতও কাজ করে, সুতরাং -s(নিঃশব্দ মোড) স্ট্রডিউটের বহিরাগত অগ্রগতি রোধের মূল বিষয়:

curl -s ... <url> | perl  -ne 'print $1 if /<sometag>([^<]+)/'

উপরের উদাহরণটি <sometag>কার্ল স্টেটমেন্টের এক্সএমএল আউটপুট থেকে সাধারণ বিষয়বস্তু (কোনও এমবেডড ট্যাগ নেই) ধরে।


2
আপনার উদাহরণগুলিতে 'xargs -0 প্রতিধ্বনি |' অপ্রয়োজনীয় যতক্ষণ আপনার 'কার্ল-এস' থাকে আপনি অন্য প্রোগ্রামে আউটপুটটি পাইপ করতে পারেন।
রায়ান হরিসবার্গার

1

শুধু আমার 2 সেন্ট। নীচের কমান্ডটি কৌশলটি করা উচিত, যেমনটি আগে উত্তর দেওয়া হয়েছিল answered

curl -vs google.com 2>&1

তবে যদি কোনও ফাইলের আউটপুট পাওয়ার প্রয়োজন হয়,

curl -vs google.com > out.txt 2>&1

কাজ করা উচিত.


1
এটি ২০১১ সালের গৃহীত উত্তরের কোনও সত্যিকারের মূল্য যোগ করে না anything যদি কিছু হয় তবে এটি উত্তরটির একটি মন্তব্য হতে পারে।
ট্রিনকোট

0

নিম্নলিখিত আমার জন্য কাজ করেছে:

নামের একটি স্ক্রিপ্টে আপনার কার্ল বিবৃতি রাখুন abc.sh

এখন চালান:

sh abc.sh 1>stdout_output 2>stderr_output

আপনি আপনার কার্লের ফলাফল stdout_outputএবং অগ্রগতির তথ্য পাবেন stderr_output


0

এই সাধারণ উদাহরণটি দেখায় কীভাবে কার্ল আউটপুট ক্যাপচার করা যায় এবং এটি ব্যাশ স্ক্রিপ্টে ব্যবহার করা যায়

test.sh

function main
{
  \curl -vs 'http://google.com'  2>&1
  # note: add -o /tmp/ignore.png if you want to ignore binary output, by saving it to a file. 
}

# capture output of curl to a variable
OUT=$(main)

# search output for something using grep.
echo
echo "$OUT" | grep 302 
echo
echo "$OUT" | grep title 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.