jq
আউটপুট পুনঃনির্দেশিত হওয়ার সময় একটি স্পষ্ট ফিল্টারের প্রয়োজনের বিষয়টি পুরো ওয়েবে আলোচিত। তবে আমি jq
কোনও পাইপ চেইনের অংশ হলে আউটপুট পুনঃনির্দেশিত করতে অক্ষম , এমনকি যখন একটি স্পষ্ট ফিল্টার ব্যবহৃত হয়।
বিবেচনা:
touch in.txt
tail -f in.txt | jq '.f1'
# in a different terminal:
echo '{"f1":1,"f2":2}' >> in.txt
echo '{"f1":3,"f2":2}' >> in.txt
প্রত্যাশিত হিসাবে, jq
কমান্ড থেকে মূল টার্মিনালের আউটপুট হল:
1
3
তবে আমি যদি jq
কমান্ডের শেষে কোনও ধরণের পুনর্নির্দেশ বা পাইপিং যুক্ত করি তবে আউটপুটটি নিঃশব্দে যায়:
rm in.txt
touch in.txt
tail -f in.txt | jq '.f1' | tee out.txt
# in a different terminal:
echo '{"f1":1,"f2":2}' >> in.txt
echo '{"f1":3,"f2":2}' >> in.txt
প্রথম টার্মিনালে কোনও আউটপুট উপস্থিত হয় না এবং আউট.টিএসটি ফাঁকা থাকে।
আমি কয়েকশ প্রকারের চেষ্টা করেছি কিন্তু এটি একটি অধরা সমস্যা। আমি খুঁজে পেয়েছি যে একমাত্র কার্যকরী , mosquitto_sub
এবং থিংস নেটওয়ার্কের মাধ্যমে আবিষ্কার করা হয়েছে (এটি যেখানে আমি বিষয়টিও আবিষ্কার করেছি) হ'ল লেজ এবং জকিউ ফাংশনগুলি শেল স্ক্রিপ্টে মোড়ানো :
#!/bin/bash
tail -f $1 | while IFS='' read line; do
echo $line | jq '.f1'
done
তারপর:
./tail_and_jq.sh | tee out.txt
# in a different terminal:
echo '{"f1":1,"f2":2}' >> in.txt
echo '{"f1":3,"f2":2}' >> in.txt
এবং যথেষ্ট নিশ্চিত, আউটপুট প্রদর্শিত হবে:
1
3
এটি jq
হোমব্রিউয়ের মাধ্যমে সর্বশেষতম ইনস্টল করা সহ :
$ echo $SHELL
/bin/bash
$ jq --version
jq-1.5
$ brew install jq
Warning: jq 1.5_3 is already installed and up-to-date
এটি কি jq
পাইপ চেইনগুলির সাথে আমার বোঝার সাথে (মূলত অননুমোদিত) বাগ রয়েছে ?
tail -f logfile | grep 'foo bar' | awk ...
tail
বিটটি পাইপটি ভেঙে ফেলার চেষ্টা করেছিল (প্রথম কমান্ডটি চালান, টিতে ফাইলটি পুনরায় ডাইরেক্ট করুন, টেল টু, নেক্সট কমান্ডে পাইপ করুন, ফাইলটিতে পুনঃনির্দেশ করুন, ইত্যাদি) এবং ধারাবাহিকভাবে এটি অবিচ্ছিন্নভাবে চালনা করুন। <
যদিও মনে রাখতে হবে একটি ভাল টুল।
tail -f
কোনও প্রোগ্রামে অবিচ্ছিন্ন ইনপুট সরবরাহ করতেtee
এবং আউটপুট প্রক্রিয়াজাতকরণের জন্য এখানে মোটামুটি (ভাল, কিছুটা) অদ্ভুত সেটআপ রয়েছে । আপনি যদি এখনও কোনও উত্তরের প্রয়োজনে থাকতেন তবে আমি চেইনটি সরল করার পরামর্শ দিয়েছিলাম<in.json jq '.f1' >out.json
যাতে এটি কী কারণে ঘটছে তা আপনি সংকুচিত করতে পারেন।