এনসিআরএস অ্যাপ্লিকেশন থেকে কল করা স্ক্রিপ্টের আউটপুটে সিকোয়েন্স সিকোয়েন্স


14

আমি বর্তমানে আমার হোমবার্সার টিএমউক্স সেশনে আমার জ্যাবার ক্লায়েন্ট হিসাবে (যা এনক্রস ব্যবহার করে) এমক্যাবার চালাচ্ছি। স্থানীয়ভাবে আমি টার্মিনাল এমুলেটর হিসাবে আইটির্ম 2 চালাই, যা চরিত্রের পালানোর সিকোয়েন্সগুলির মাধ্যমে গ্রোলের বিজ্ঞপ্তিগুলির ট্রিগার সমর্থন করে।

দ্রষ্টব্য: echoএই প্রশ্নে সমস্ত কাজ করে printf %bবা echo -eবাশ এবং জিএনইউতে echo

উদাহরণস্বরূপ, echo "\e]9;foobar\007"আইটিআরএম 2 "ফুবার" পাঠ্যের সাহায্যে গ্রোল বার্তা প্রেরণ করে।

যাইহোক, যখন কোনও টিএমউক্স সেশনে হয়, তখন পালানোর ক্রমগুলি খেয়ে যায়। সুতরাং স্বত্বাধিকারী চরিত্রের পালানোর ক্রমটি ব্যবহার করে এটি ব্যবহার করা \Ptmuxযেতে পারে:

echo "\ePtmux;\e\e]9;foobar\007\e\\"

এটি একটি টিএমউক্স সেশনের মধ্যে থেকে একটি পাতলা বার্তা ট্রিগার করে।

যাইহোক, আমি যখন আমার এমক্যাবার ইভেন্টের স্ক্রিপ্টটিতে এটি ব্যবহার করি যা কোনও নতুন বার্তা পাওয়ার পরে বরখাস্ত হয়, কোনও বিজ্ঞপ্তি ট্রিগার করা হয় না, যেন ইকোটি ভুল টার্মিনালে প্রেরণ করা হয়।

আমি মনে করি এটি সেই ম্যাক্যাবারের সাথে করতে হবে যা স্ক্রিপ্টকে ট্রিগার করে তোলে এটি একটি এনক্রাস অ্যাপ্লিকেশন তাই আমার সাধারণ ব্যাশ স্ক্রিপ্টের আউটপুটটি হারিয়ে যায় এবং আইটার্ম 2 এটি কখনই দেখতে পায় না।

আমি আবিষ্কার করা কিছু ধারণাগুলির প্রতিধ্বনি করার আগে আমি সাফল্য ছাড়াই স্ম্যাকআপ কল করার চেষ্টা করেছি

tput smcup
echo "\ePtmux;\e\e]9;$FROM: $MSG\007\e\\"
tput rmcup

আমি মনে করি যে এটি "রিয়েল টার্মিনাল উইন্ডো" তে ফিরে আসে না, তবে এনসিউর্স উইন্ডোতে আরও আউটপুট নির্দেশ করছে this

এটি সম্পর্কে কোনও ধারণা?

উত্তর:


1

ইভেন্ট-স্ক্রিপ্ট একটি "গ্রিলার" বার্তা প্রেরণে ব্যর্থ হওয়ার কারণ হ'ল এটি কোনও ইভেন্ট কমান্ড চালালে mcabberস্ট্যান্ডার্ড ইনপুট, আউটপুট এবং ত্রুটি প্রবাহকে বন্ধ করে দেয় । আপনি এটি দেখতে পারেন hooks.c:

  if ((pid=fork()) == -1) {
    scr_LogPrint(LPRINT_LOGNORM, "Fork error, cannot launch external command.");
    g_free(datafname);
    return;   
  }    
  if (pid == 0) { // child
    // Close standard file descriptors
    close(STDIN_FILENO);
    close(STDOUT_FILENO);
    close(STDERR_FILENO);
    if (execl(extcmd, extcmd, arg_type, arg_info, bjid, arg_data,
              (char *)NULL) == -1) {
      // scr_LogPrint(LPRINT_LOGNORM, "Cannot execute external command.");
      exit(1);
    }
  }
  g_free(datafname);

এটি ইভেন্টের স্ক্রিপ্টটি ব্যবহৃত স্ট্রিমে হস্তক্ষেপ না করে চালিত করে mcabber

সেখানে বার্তা (সব পরে, আটকাচ্ছে কোন বিশেষ ncurses মোড tmuxহয় ইতিমধ্যে একটি terminfo অ্যাপ্লিকেশন হিসেবে চলমান)। আপনি সম্ভবত echo(নিজের পছন্দটি printf) এ /dev/tty, যেমন, তে পুনর্নির্দেশ করে সমস্যার আশপাশে কাজ করতে পারেন

#!/bin/sh
printf '\033Ptmux;\033\033]9;foobar\007\033\\' >/dev/tty

0

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


0

যদি আপনি এমন কিছু রাখতেন ...

export "PTTY=$(tty)"

... আপনার /etc/profileতখন প্রতিটি নতুন -lওগিন শেলের জন্য আপনি অনুরোধ করবেন (যা আপনি সাধারণত একটি নতুন টার্মিনাল উইন্ডো খোলার পরে ঘটে থাকে) পরিবেশগত পরিবর্তনশীলটি তার সমস্ত শিশু প্রক্রিয়ার জন্য উপলব্ধ করা হবে - যার মধ্যে অন্তর্ভুক্ত হওয়া উচিত tmuxএবং এর সমস্ত শিশু ।

এটি আপনাকে করতে সক্ষম করবে ...

printf '\033]9;foobar\007' >"$PTTY"

... এবং এর মাধ্যমে ptyআপনার বর্তমান শেল এবং আপনি যে টার্মিনাল এমুলেটর ব্যবহার করছেন তার মধ্যে উপস্থিত থাকতে পারে এমন কোনও স্তর পেরিয়ে যান।


0

যদি সমস্যাটি হয় যে আপনার ব্যাশ স্ক্রিপ্ট থেকে আউটপুটটি হারাতে চলেছে, তবে আপনি পুনঃনির্দেশের সাহায্যে যুদ্ধ জিততে পারবেন:

প্রতিধ্বনি "\ ePtmux; \ ই \ ই] 9; ফুবার \ 007 \ ই \"> / দেব / টিটি

তবে আমি সন্দেহ করি যে আসল সমস্যাটি হ'ল আপনার ব্যবহার করা উচিত echo -eযাতে ব্যাশ আপনার স্ট্রিংয়ের মধ্যে পালানোর ক্রমগুলি প্রসেস করে।

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