zsh টার্মিনালে ইনপুট দিতে পারে না যখন stdin এবং stdout ভেরিয়েবল কমান্ডের সাথে tty আউটপুট থাকে pip


11

সিস্টেমের তথ্য:

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যা প্রক্রিয়া বিকল্প ব্যবহার করে পুনঃনির্দেশ করে।


1
আউটপুট psআপনাকে জানাবে যে, এর কোনও ক্ষেত্রেই শাঁস হিমশীতল বা আটকে যায় না। তারা কেবল সাধারণ পদ্ধতিতে শিশু প্রক্রিয়াগুলির জন্য অপেক্ষা করছে; এই শিশু প্রক্রিয়াগুলি স্থগিত বা বন্ধ হয়ে গেলে তারা প্রকৃতপক্ষে ইনপুটটির অনুরোধ জানাতে ফিরে আসবে those আপনার প্রশ্নের শিরোনাম এবং শরীরে একটি অন্তর্নিহিত মিথ্যা প্রমাণ অন্তর্ভুক্ত। "আমার শেল কেন হিম হয়ে যায়?" যখন আপনার শেলটি প্রথম স্থানে শীতল হয় না তখন অযোগ্য অযোগ্য অচল প্রশ্ন । এই অন্তর্নিহিত মিথ্যা ভিত্তিটি সরিয়ে দেওয়ার জন্য আপনার আরও ভাল প্রশ্ন হবে।
JdeBP

ঠিক আছে, আমি এটি পরিবর্তন করতে পারি। প্রক্রিয়াটি আর সিপিইউতে নির্দেশনা চালাতে সক্ষম নয় এই অর্থে এটি হিমশীতল নয়। আপনি ঠিক বলেছেন যে এটি কেবল অপেক্ষা করছে। তবে তা কি 'আটকে' নেই? এটি ইনপুটটির জন্য অপেক্ষা করছে আমি এটি সরবরাহ করতে সক্ষম নই। এটি সংক্ষিপ্তভাবে বর্ণনা করার জন্য আরও ভাল শব্দটি কী? এটি হ্যাং when either a computer program or system ceases to respond to inputs
dosenmatter

1
শেলটি ইনপুটটির জন্য অপেক্ষা করছে না। এটি তার বাচ্চাদের জন্য অপেক্ষা করছে। এই প্রশ্নটি আরও ভালভাবে কী হবে তা বর্ণনা করে দেওয়া হবে । অনুমান এবং সূচনাগুলি যেমন "আমার শেল হিমায়িত হয়" গঠন করবেন না এবং তারপরে তথ্যগুলি সম্পর্কে জিজ্ঞাসা করুন। কী ঘটে তা বর্ণনা করুন এবং সে সম্পর্কে জিজ্ঞাসা করুন: বিশেষ চরিত্রের টার্মিনাল ইনপুট সিকোয়েন্সগুলি (যা সাধারণত অগ্রভাগের কাজটি স্থগিত করে, বা বাধা দেয় বা কাজটি ছেড়ে দেয়, বা টার্মিনাল থেকে প্রক্রিয়া পড়ার জন্য একটি ইওএফ ইঙ্গিত পাঠায়) এর কোনও প্রভাব নেই। কি হচ্ছে? কেন? । এটি ডিবিয়ান লিনাক্স এবং ফ্রিবিএসডি / ট্রুওএস-তে প্রতিলিপিযোগ্য,
যাইহোক

1
আমি zsh বিকাশ মেলিং তালিকায় বাগ রিপোর্ট করেছি । আপাতত, আপনি এটি একটি সাব(echo | $(echo vipe) | cat)
শেলের

1
প্রসেসের বিকল্পগুলি পটভূমিতে শুরু হওয়ার ঘটনাটি ডকুমেন্টেড যা আমি মনে করি (বা কমপক্ষে পরিচিত)
স্টাফেন চেজেলাস

উত্তর:


0

আমি বিশ্বাস করি যে আপনার সমস্যাটি আপনার বিস্তৃততাকে যথাযথভাবে উদ্ধৃত করতে উত্সাহিত করবে।

Zsh থেকে উদ্ধৃতি : 14 সম্প্রসারণ

ডলারের চিহ্নের আগে বন্ধনীতে আবদ্ধ একটি কমান্ড, যেমন $(...), 'বা' এর মতো গুরুতর উচ্চারণের সাথে উদ্ধৃত হয়, ...তার পিছনে যে কোনও নতুন লাইনে মুছে ফেলা হয় its প্রতিস্থাপনটি যদি ডাবল উদ্ধৃতিতে আবদ্ধ না হয় তবে আউটপুটটি আইএফএস প্যারামিটার ব্যবহার করে শব্দগুলিতে বিভক্ত হয়। বিকল্পটি $(cat foo)সমপরিমাণ দ্বারা দ্রুত প্রতিস্থাপন করা যেতে পারে তবে দ্রুত $(<foo)। উভয় ক্ষেত্রেই, যদি GLOB_SUBST বিকল্পটি সেট করা থাকে তবে আউটপুট ফাইলের নাম তৈরির জন্য উপযুক্ত।

নোট করুন যে আপনার প্রশ্নের উদাহরণ # 2 এর ফলে NUL এর অসীম প্রতিধ্বনির ফলাফল ঘটে:

প্রতিস্থাপনটি যদি ডাবল উদ্ধৃতিতে আবদ্ধ না হয় তবে আউটপুটটি আইএফএস প্যারামিটার ব্যবহার করে শব্দগুলিতে বিভক্ত হয়।

অন্য কথায় শেলটি অসীমভাবে অপেক্ষা করে echo, কারণ পূর্বনির্ধারিত ডিলিমিটার স্পেস হয়, প্রতিধ্বনি কখনই সম্পূর্ণ হয় না। টিএলডিপি দেখুন: অভ্যন্তরীণ চলক । এটি catকমান্ডের জন্য একটি স্তব্ধ পাইপ ফেলেছে ।

একটি কুঁচক হিসাবে, আমি আউটপুট পুনর্নির্দেশের কারণে 4 এবং 5 কাজ বিশ্বাস করি।

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