কিভাবে একটি নতুন tmux সেশনে কোড চালানো যায় - বর্তমান অধিবেশন থেকে?


13

আমি উবুন্টু 16,04 ব্যবহার এবং আমি নিম্নলিখিত প্রয়োজন tmuxসমাধান কারণ আমি সঙ্গে একটি সময়সীমার প্রক্রিয়া চালাতে চান sleepআমার বিশেষ ক্ষেত্রে যেমন আমি থেকে সন্তুষ্ট ছিল না atএবং সাথে একটি বাগ সম্মুখীন nohup(যখন মিশ্রন nohup-sleep)। এখন tmuxএটির মতো সেরা বিকল্প হিসাবে মনে হচ্ছে এটির নিজস্ব কোনও হ্যাঙ্গআপ প্রক্রিয়া রয়েছে এবং এটি ম্যানুয়াল ব্যবহারে ভাল কাজ করছে (আমি ইতিমধ্যে প্রক্রিয়াটি স্বয়ংক্রিয়রূপে গ্রহণের ক্ষেত্রে কেবল প্রশ্নটি জিজ্ঞাসা করি) এটি ইতিমধ্যে নিজেই করতে পারি)।

আমার যা দরকার:

নিম্নলিখিত ক্রিয়াগুলি করার জন্য আমার একটি উপায় দরকার, সমস্তই এক ক্রিয়াকলাপে:

  1. একটি নতুন tmuxঅধিবেশন সংযুক্ত করা হচ্ছে ।
  2. Session অধিবেশনটির মতো একটি কমান্ডের প্রস্তুত সেট ইনজেকশন করা (sleep 30m ; rm -rf dir_name ; exit)। আমি বিশেষত একটি দীর্ঘ সারি নয়, একটি বহু-লাইন সেট পছন্দ করব।
  3. উপরের কমান্ডটি কার্যকর করে নতুন tmuxসেশনে স্টিডিন হিসাবে লেখা শেষ হওয়ার মুহুর্তটি সেট করে ।

অন্য কথায়, আমি অন্য একটি tmuxসেশনে একটি কোড সেট কার্যকর করতে চাই যা বিশেষত সেই কারণে তৈরি হয়েছিল, তবে সমস্তই একটি ক্রিয়াকলাপে করতে।


মন্তব্য:

  • আমার লক্ষ্যটি আমার আসল কার্যদিবস অধিবেশন (যা বেশিরভাগ সময় থেকে আমি কাজ করি) থেকে করব। সাধারণত, নতুনভাবে তৈরি হওয়া সেশনটি দেখার আমার কোনও ইচ্ছা নেই, আমি কেবল এটির সাথে স্বয়ংক্রিয়ভাবে সম্পাদিত কোডটি তৈরি করতে চাই এবং এটিই।

  • যদি সম্ভব হয় তবে আমি একটি বংশগত সমাধান পছন্দ করব। আমি মনে করি এটি সবচেয়ে দক্ষ।

উত্তর:


18

আপনি যদি কোডটি কার্যকর করতে চান তবে উদাহরণস্বরূপ /opt/my_script.sh, আপনি যা চান তা করা খুব সহজ:

tmux new-session -d -s "myTempSession" /opt/my_script.sh

এটি আপনার স্ক্রিপ্টটি সম্পাদন করে "মাইটাইপসেশন" নামে একটি নতুন বিচ্ছিন্ন অধিবেশন শুরু করে। পরে এটি সম্পাদন করে এটি কী করছে তা যাচাই করার জন্য আপনি এটির সাথে সংযুক্ত করতে পারেন tmux attach-session -t myTempSession

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

উদাহরণস্বরূপ, এখানে একটি হ্যাক রয়েছে যা আপনি চাইলে আচরণটি অনুকরণ করার জন্য উপরে প্রস্তাবিত কমান্ডটি ব্যবহার করে (= একটি হেরডোক থেকে নতুন টিএমক্স সেশনে কোড সম্পাদন করুন ute অস্থায়ী ফাইল তৈরি হওয়ার সাথে সাথে সার্ভারের হার্ড ড্রাইভে কোনও লেখা আসে না /dev/shm, যা হ'ল একটি tmpfs):

(
  cat >/dev/shm/my_script.sh &&
  chmod +x /dev/shm/my_script.sh &&
  tmux new-session -d '/dev/shm/my_script.sh; rm /dev/shm/my_script.sh'
) <<'EOF'
    echo "hacky, but works"
EOF

1
প্রিয় মারিও আপনার উত্তরগুলি পড়ে সর্বদা আনন্দিত। আমি সঠিক বুঝতে পেরেছি কিনা তা নিশ্চিত নই, দয়া করে আমি ভুল হলে আমাকে বলুন: 1.এটি করার দুটি উপায় রয়েছে, একটিতে প্রথমে একটি অস্থায়ী স্ক্রিপ্ট তৈরি করা হয় (এতে কোড রয়েছে) এবং এটি তৈরি করে এক্সিকিউট করা হয় এবং দ্বিতীয়টি হেরডোক হয় উপায়। 2.যদি দ্বিতীয় উপায়টি কাজ করে (যখন প্রতিটি প্রতিধ্বনি সারিতে হেরডোকের প্রতিটি কোড সারি থাকে) বাশ বৈধ কোডটি হ'ল কেন আমাদের এটিকে হ্যাক হিসাবে দেখা উচিত? হেরডোকের সারিগুলি প্রতিধ্বনিত হয় এবং নিয়মিতভাবে হেরডোকগুলিতে কার্যকর না হওয়ার কারণে হতে পারে?
জনডোইয়া

2
@ বেনিয়া এটি একটি হ্যাক যেহেতু এটি কেবলমাত্র কয়েকটি ইউনিক্স সিস্টেমে কাজ করে /dev/shm। এটি একটি জটিল যেহেতু এটি একটি সাধারণ ফাইলটিতে স্ক্রিপ্টটি লেখার চেয়ে এটি আরও জটিল, পড়া সহজ, বোঝা এবং বজায় রাখা সহজ tmux
কুসালানন্দ

1
@ কুসালানন্দ যেমন ব্যাখ্যা করেছেন, কোড প্রয়োগের জন্য বংশগতি সাধারণভাবে খারাপ অভ্যাস। যথেষ্ট কুৎসিত এবং অনিবার্য, এটি কাজ করে, তবে এটি আপনাকে অন্যথায় খুব সাধারণ জিনিসগুলি করার চক্রাকারে উপায় খুঁজে পেতে বাধ্য করে ... উত্তরের প্রথম এবং দ্বিতীয় কোড ব্লকের সাথে তুলনা করুন: কীভাবে এটি কাজ করে তা বলতে পারবেন? এটি করতে আপনার কতক্ষণ সময় লাগবে? এটি হ্যাকের আরও অনেক বেশি কারণ স্টিমিনের কাছ থেকে কমান্ড কার্যকর করার কোনও উপায় নেই tmux (আরও বেশি-হ্যাকি উপায়ে সংরক্ষণ করুন যাতে কুশ্রী আমিও বিবেচনা করি না), সুতরাং বাহ্যিক স্ক্রিপ্টগুলি একমাত্র ( 1.আপনার প্রশ্নের উত্তরটির উপায়) উপায় ।
মারিও ভিটালে

1
দুঃখিত, প্রথম নমুনাতে একটি ত্রুটি হয়েছিল (আপনি যুক্তি ব্যবহার করে "নতুন সেশন" কমান্ড জড়িত নয়)। এখন এটা স্থির।
মারিও ভিটালে

1
এখন যখন আমি tmux new-session -d -s "myTempSession" /opt/my_script.shএটি সম্পাদন করি তখন কোডটি আটকানোর জন্য আমার কাছে একটি অস্থায়ী ফাইল খোলার দরকার নেই ... আমার যা দরকার তা হ'ল সরাসরি সেশন থেকে স্ক্রিপ্টটি খোলার জন্য, বা কমপক্ষে নতুন অধিবেশনটিতে যাওয়ার জন্য কিছু আছে এবং তারপরে সরাসরি ফিরে যেতে বর্তমান অধিবেশন বিটিডাব্লু আমি আপনার সমস্ত সহায়তার জন্য অনুদান দেওয়ার পরিকল্পনা করি কারণ আপনাকে ধন্যবাদ জানাতে আমি যতটা করতে পারি এবং 11 ঘন্টা পরে আমি অনুগ্রহ দিতে পারি।
জনডোয়ায়

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