সিস্টেমের তথ্য:
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ডিফল্টরূপে fzfstdout এ আউটপুট এবং পরামিতি প্রতিস্থাপন কেবল কমান্ড চালায় ( 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 আপনার প্রশ্নের শিরোনাম এবং শরীরে একটি অন্তর্নিহিত মিথ্যা প্রমাণ অন্তর্ভুক্ত। "আমার শেল কেন হিম হয়ে যায়?" যখন আপনার শেলটি প্রথম স্থানে শীতল হয় না তখন অযোগ্য অযোগ্য অচল প্রশ্ন । এই অন্তর্নিহিত মিথ্যা ভিত্তিটি সরিয়ে দেওয়ার জন্য আপনার আরও ভাল প্রশ্ন হবে।