আপনি কী টাইপ স্ক্রিপ্টে আছেন তা কীভাবে জানবেন?


11

scriptটার্মিনাল থেকে ডেকে আনা একটি ফাইলের সমস্ত আউটপুট সংরক্ষণ করার জন্য আমি কমান্ডটি ব্যবহার করছি typescript। অথবা script fooফাইলটি সংরক্ষণ করতে foo

এখন, আসুন আমি কমান্ডের পরে টাইপিং কমান্ডের সাথে যাচ্ছি এবং আমি ভুলে যাচ্ছি যে আমি টাইপ স্ক্রিপ্টে আছি কি না।

আমি টাইপস্ক্রিপ্টের মধ্যে আছি কি না তা কীভাবে জানতে পারি?

উত্তর:


7

এর সাথে হতে পারে:

if lsof -tac script "$(tty)" > /dev/null; then
  echo "I'm running under script"
else
  echo "I'm not"
fi

আপনি এর মতো কিছু যুক্ত করতে পারেন:

lsof -tac script "$(tty)" > /dev/null && PS1="[script] $PS1"

আপনার ~/.zshrcবা ~/.bashrcতাই, scriptআপনার শেল প্রম্পটে আপনার উপস্থিত থাকা বা না থাকা সম্পর্কিত তথ্য দৃশ্যমান হবে।

বিকল্পভাবে, আপনি যদি গ্যারান্টি দিতে না পারেন তবে আপনি এটি করতে পারবেন lsof(একটি অবরুদ্ধ আইএফএস ধরে):

terminal=$(ps -o comm= -p $(ps -o ppid= -p $(ps -o sid= -p "$$")))
[ "$terminal" = script ] && PS1="[script] $PS1"

অনুসন্ধানমূলক যা সাধারণত টার্মিনাল এমুলেটর হবে অধিবেশন নেতার পিতা বা মাতা নির্দেশে নাম পেতে হয় ( xterm, script, screen...)।


1
@teikakazura, অনুসন্ধানমূলক অংশ কারণ আপনার নিশ্চিত নয় করছি এটি অধিবেশন নেতার পিতা বা মাতা প্রক্রিয়া হতে হবে ছিল। আপনার অধিবেশন লিডার এবং এর অভিভাবক হিসাবে পিডের পুনরায় ব্যবহারের কিছুই এখানে নেই যখন আপনি সেই আদেশটি চালাবেন। আপনি বলতে পারেন যে প্রথমটি হিউরিস্টিক পাশাপাশি আমরা কেবল প্রক্রিয়াটির নামটি যাচাই করছি। যার নামও scriptরয়েছে এবং tty খোলা আছে এমন কোনও আদেশও মিথ্যা ধনাত্মক হতে পারে cause
স্টাফেন চেজেলাস

1
@teikakazura সম্পর্কে (2), এটি বর্তমান শেলের পিপিড চেক করবে। এখানে, আপনি অধিবেশন নেতার পিপিড চেক করতে চান (সাধারণত, এটি যে শেলটি scriptশুরু হয়েছিল)।
স্টাফেন চেজেলাস

আমি বুঝতে পারছি না @StephaneChazelas এখানে মন্তব্য (কি "(2)", সম্ভবত একটি মুছে যাওয়া মন্তব্যে), কিন্তু উত্তর দ্বিতীয় অংশ যেমন না শুধুমাত্র সনাক্ত করতে খুবই আকর্ষণীয় scriptকিন্তু অন্যান্য পরিস্থিতিতে, মত su -l, ssh, লিনাক্স কনসোল এবং সম্ভবত অন্যরা এবং psআরও অনেক তথ্য সরবরাহ করে (অন্য যুক্তি দিয়ে )।
স্টাফেন গৌরিচন

5

আকর্ষণীয় সমস্যা। আমি খুঁজে পেয়েছি একটি ছোট বাশ স্ক্রিপ্ট বেশ নির্ভরযোগ্যতার সাথে কাজটি করতে পারে:

#!/bin/bash

PP=$(ps -o ppid= $$)

while [[ $PP != 1 ]]
do
    LINE=$(ps -o ppid= -o comm= $PP | sed 's/^  *//')
    COMM=${LINE#* }
    PP=${LINE%% *}
    if [[ $COMM == script ]]  # Might need a different comparison
    then
        echo "In script"
        exit 0
    fi
done
echo "Not in script"

আমি মনে করি এটি স্টিফেন চেজেলাসের প্রস্তাবিত তুলনায় কিছুটা আলাদা, কারণ আমার স্ক্রিপ্টটি পিতামাতার উপরে চলে যায়: লিনাক্স / ইউনিক্স প্রক্রিয়াগুলি যেহেতু পিআইডি 1 না পাওয়া পর্যন্ত এটির সাথে সম্পর্কযুক্ত বা এটি "স্ক্রিপ্ট "টিকে প্রক্রিয়া হিসাবে আবিষ্কার করে।


4
আকর্ষণীয় পদ্ধতির। তবে নোট করুন যে উদাহরণস্বরূপ, আপনি যদি xtermআপনার স্ক্রিপ্ট সেশন থেকে একটি শুরু করেন , তবে সেই স্ক্রিপ্টটি সেই এক্সটারেমের শেলটি স্ক্রিপ্টের আওতায় চলবে thing ওয়েল এটি একটি উপায়ে, কিন্তু আউটপুট টাইপ স্ক্রিপ্ট যাচ্ছে না। আমার পদ্ধতির বর্তমান অধিবেশনটির সাথে সম্পর্কিত টার্মিনালটি পরীক্ষা করে যাতে সমস্যা হয় না।
স্টাফেন চেজেলাস

0

আপনার যদি আপনার পাথে ব্যক্তিগত বিন / ডিরেক্টরি থাকে (যেমন / হোম / ব্যবহারকারী / বিন, নীচের বিষয়বস্তু সহ 'স্ক্রিপ্ট' (বাইনারি হিসাবে একই নাম) নামের সাথে একটি শেল স্ক্রিপ্ট সেখানে রাখুন:

#!/bin/bash
export SCRIPT_RUNNING=1
exec /usr/bin/script # full path to your script(1) binary

এখন, স্ক্রিপ্ট চলার মধ্যে, আপনি এনভায়রনমেন্ট ভেরিয়েবল SQLT_RUNNING এর জন্য পরীক্ষা করতে পারেন, এবং এর উপর ভিত্তি করে আপনি যা চান তা করতে পারেন।

সম্পাদনা করুন:

আসলে, এখানে অনেক সহজ উপায় আছে। নীচে এটি সব বলেছে, তিনটি ফাইল, ~ / বিন / স্ক্রিপ্ট, ~ / বিন / স্ক্রিপ্ট-শেল এবং ~ / .Scriptrc তৈরি করুন:

~ > ls ~/bin/script ~/bin/script-shell ~/.scriptrc
-rw-r--r-- 1 roadowl users 23 Oct 18 16:52 /home/roadowl/.scriptrc
-rwx------ 1 roadowl users 49 Oct 18 16:53 /home/roadowl/bin/script
-rwx------ 1 roadowl users 56 Oct 18 16:55 /home/roadowl/bin/script-shell

~/bin > cat script
#!/bin/bash
exec /usr/bin/script -c script-shell

~/bin > cat script-shell
#!/bin/bash
exec /bin/bash --rcfile /home/bjd/.scriptrc

~/bin > cat ~/.scriptrc
export PS1="[script] "

যদি আপনার বর্তমান শেল বাশ hash -rহয় তবে 'স্ক্রিপ্ট' কমান্ড হিসাবে প্রবেশ করার পরে with / বিন / স্ক্রিপ্টটি চালানো হবে তা নিশ্চিত করার জন্য, এই ফাইলগুলি তৈরি করার পরে চালানো ভুলবেন না (পরীক্ষা করুন which script)।

আগের মতো, দ্রষ্টব্য যে আপনার পাথের মধ্যে অবশ্যই ~ / বিন থাকতে হবে, এটি কাজ করার জন্য স্ট্যান্ডার্ড পাথের আগে।

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