সিস্টেমের তথ্য:
macOS Sierra 10.12.6
zsh 5.4.2 (x86_64-apple-darwin16.7.0)
GNU bash, version 4.4.12(1)-release (x86_64-apple-darwin16.3.0)
নীচে থাকা উদাহরণগুলিতে স্ক্রোল করুন যদি আপনি কেবল আমার তৈরি করা সরলীকৃত উদাহরণগুলিতে সন্ধান করতে চান।
দ্রষ্টব্য: আমি কোনও বড় zsh
ব্যবহারকারী নই ।
আমি খুঁজছেন ছিল fzf
জন্য কী-বাইন্ডিং bash
এবং zsh
।
তারা উভয় কীভাবে একটি চলক কমান্ড চালায় তা লক্ষ্য করুন $(__fzfcmd)
। __fzfcmd
ডিফল্টরূপে fzf
stdout এ আউটপুট এবং পরামিতি প্রতিস্থাপন কেবল কমান্ড চালায় ( fzf
) ফলে আউটপুট।
bash
এবং zsh
স্ক্রিপ্টের মধ্যে একটি পার্থক্য হ'ল এটির bash
আরও একটি আউটপুটটি পাইপ করে $(__fzfcmd)
তবে zsh
কেবল এটি অ্যারের ভিতরে ক্যাপচার করে। আমার অনুমান কারণ আপনি zsh
যখন আরও fzf
ইনপুট করতে পারবেন না এবং যেখানে fzf
পাইপযুক্ত প্রক্রিয়াটি fzf
কোনও স্টিডিন পাবে না তার আউটপুটটি পাইপ করার সময় একটি সমস্যার কারণ । আপনার একমাত্র পছন্দ ^Z
বা হয় ^C
। ^C
প্রক্রিয়াটি কোনও কারণে ব্যাকগ্রাউন্ড বলে মনে হচ্ছে। অথবা তারা কেবল এটি একটি অ্যারে চেয়েছিল যাতে তারা এটি চালাতে zle vi-fetch-history
পারে । bash
সংস্করণ কী কিছু জাদু সঙ্গে বাঁধাই করে"\e^": history-expand-line
এখন fzf
গুরুত্বপূর্ণ নয়। দেখে মনে হচ্ছে আপনার কেবল একটি প্রোগ্রাম দরকার যা tty
এই সমস্যার কারণ হতে পরামিতি প্রতিস্থাপনের মাধ্যমে ডেকে আউটপুট দেয় । সুতরাং আমি কিছু সহজ উদাহরণ দেখাব।
এখানে আরও কিছু কমান্ড রয়েছে যা আউটপুট দেয় tty
যা এই সমস্যার কারণ হতে পারে zsh
:
- মুছা (একটি পাইপের মাঝখানে সম্পাদক চালান)
'vim -'
(স্টিডিন থেকে ভিম পড়ুন v পাইপের অনুরূপ তবে স্টাডআউটে আউটপুট আসবে না)
নিচে উদাহরণে, প্রতিটি ঘটনা প্রতিস্থাপন vipe
সঙ্গে vim -
আপনি একটি পৃথক ইনস্টল করতে চাই না। কেবল মনে রাখবেন যে vim -
সম্পাদকের সামগ্রীগুলি স্টাডআউটের মতো আউটপুট দেয় vipe
না।
উদাহরণ:
1) echo 1 | vipe | cat # works in both bash and zsh
2) echo 1 | $(echo vipe) | cat # works in bash only. zsh problem with no output until I hit `^C`:
^C
zsh: done echo 1 |
zsh: suspended (tty output) $(echo vipe) |
zsh: interrupt cat
# seems like the process is backgrounded. I can still see it in jobs command
3) cat <(echo 1 | $(echo vipe)) # zsh and bash has the problem. I'm guessing because
# the file isn't finished writing and cat is
# blocking vipe's tty output
# both their `^C` output is just:
^C # nothing special, as expected
4) cat < <(echo 1 | $(echo vipe)) # works in both bash and zsh
5) echo 1 | $(echo vipe) > >(cat) # works in both bash and zsh
# The following don't have and input pipe to vipe.
# Type something then send EOF with ^D
6) vipe | cat # works for both
7) $(echo vipe) | cat # works for both
এখন, আমি বেশিরভাগ ক্ষেত্রেই ভাবছি কেন 2)
এর জন্য সমস্যা আছে zsh
তবে bash
কেন নয় এবং কেন 4)
এবং সমস্যার 5)
সমাধান করে zsh
।
zsh
এই সমস্যাটির জন্য প্রয়োজনীয়তাগুলি শিরোনামে আমি ঠিক কী রেখেছি বলে মনে হয়:
- ইনপুট পাইপ
tty
আউটপুট রয়েছে এমন ভেরিয়েবল / পরামিতি বিকল্প দ্বারা চালিত কমান্ড- আউটপুট পাইপ
হালনাগাদ
আমি আর একটি কাজ যুক্ত zsh
করেছি যা এই সমস্যার কারণ হয় না 5)
,। এটি অনুরূপ 4)
তবে stdout
সরাসরি পুনর্নির্দেশের পরিবর্তে stin
, আমি এটিকে এমন কোনও ফাইলে পুনর্নির্দেশ করি stdin
যা প্রক্রিয়া বিকল্প ব্যবহার করে পুনঃনির্দেশ করে।
when either a computer program or system ceases to respond to inputs
(echo | $(echo vipe) | cat)
ps
আপনাকে জানাবে যে, এর কোনও ক্ষেত্রেই শাঁস হিমশীতল বা আটকে যায় না। তারা কেবল সাধারণ পদ্ধতিতে শিশু প্রক্রিয়াগুলির জন্য অপেক্ষা করছে; এই শিশু প্রক্রিয়াগুলি স্থগিত বা বন্ধ হয়ে গেলে তারা প্রকৃতপক্ষে ইনপুটটির অনুরোধ জানাতে ফিরে আসবে those আপনার প্রশ্নের শিরোনাম এবং শরীরে একটি অন্তর্নিহিত মিথ্যা প্রমাণ অন্তর্ভুক্ত। "আমার শেল কেন হিম হয়ে যায়?" যখন আপনার শেলটি প্রথম স্থানে শীতল হয় না তখন অযোগ্য অযোগ্য অচল প্রশ্ন । এই অন্তর্নিহিত মিথ্যা ভিত্তিটি সরিয়ে দেওয়ার জন্য আপনার আরও ভাল প্রশ্ন হবে।