ইউনিক্স টার্মিনালে কীভাবে প্রস্থান কমান্ড কাজ করবে?


14

exitইউনিক্স টার্মিনালে কমান্ডটি কীভাবে কাজ করে তা দয়া করে কেউ ব্যাখ্যা করতে পারেন ?

অনুসন্ধান man exit এবং এটি কার্যকর which exitছিল না এবং আমি নিম্নলিখিত ইস্যুটিতে এসেছি।

আমার নতুন রেড হ্যাট সিস্টেমে অ্যানাকোন্ডা এবং পাইচার্মের জন্য প্যাকেজগুলিতে অ্যাড ইনস্টল করার পরে আমি লক্ষ্য করেছি যে যখনই আমি exitটার্মিনাল সেশন থেকে বেরিয়ে আসতে বলি তখন আমি ত্রুটিগুলির একটি সিরিজ পেয়ে যাব এবং তারপরে টার্মিনালটি প্রত্যাশা অনুযায়ী সরে যায়। ত্রুটিগুলি মনে হয় যে আমার কলটিতে exitএকটি কল ট্রিগার করছে rm ~/anaconda3/.../এবং এর rm ~/PyCharm/....ফলে ত্রুটি ঘটছে । সমস্ত ডিরেক্টরি হ'ল এই প্রোগ্রামগুলির জন্য আমি যে প্যাকেজগুলি ডাউনলোড করেছি তার অবস্থানগুলি (যেমন নাম্বার) বলে মনে হয়, নীচে দেখুন।

$ exit
rm: cannot remove ‘~/anaconda3/lib/python3.5/site-packages/numpy/core’: Is a directory
...
...

স্থিরপ্রতিজ্ঞ

আমার ~/.bash_logoutফাইলটিতে, একটি লাইন ছিল

find ~ -xdev ( -name *~ -o -name .*~ -o -name core ) -exec \rm '{}' \;

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


শুধু নির্মল: আপনি যে বলছে, আপনি Anaconda দ্বারা এবং PyCharm জন্য প্যাকেজ অ্যাড ইনস্টল করার পরে, আপনি ত্রুটি একটি সিরিজ যাই যখন আপনি ব্যবহার exitবাইরে থেকে প্রস্থান করার জন্য যে টার্মিনাল সেশন - অথবা যে এরকম যে প্রত্যেক সময় আপনি ব্যবহার exitযে পরে?
জি-ম্যান 'পুনর্বহাল মনিকা' বলে

1
এটি প্যাকেজে এই অ্যাড ইনস্টল করার পরে প্রতিটি টার্মিনাল সেশনের জন্য ঘটেছে।
এরি Oct৪

1
খুব আশ্চর্যের বিষয়, আপনি ইতিমধ্যে যাচাই করে exitফেলেছেন যে কোনও নাম নেই কিনা ?
ডোমিনিক

3
এটি coreফাইল মুছে ফেলার চেষ্টা করার কারণ হ'ল এগুলি সাধারণত ক্র্যাশডাম্প ফাইল ( কোর ডাম্প ) থাকে যা স্থান নেয় তবে আপনি ক্র্যাশিং সফ্টওয়্যারটি বিকাশ না করলে খুব কমই কার্যকর। এই ক্ষেত্রে এটি নামের একটি ডিরেক্টরি মুছে ফেলার চেষ্টা করছে core, যা ব্যর্থ হয় (এবং ভাল জিনিস এটি ব্যর্থ হয় - numpy.coreNumPy এর জন্য প্রয়োজনীয়!)।
nneonneo

আজকাল বেশিরভাগ সিস্টেমে ডিফল্টরূপে মূল ডাম্প না লেখার জন্য কনফিগার করা হয়েছে ( ulimit -c 0ডিফল্ট করে) এই find -exec rmআদেশটি কোনওভাবেই আমি চাই না, তবে আপনি এটি যুক্ত -type fকরতে পারেন। -exec rm {} +পরিবর্তে ... \;এটি ব্যবহার করে আপনি একাধিক ফাইল মুছে ফেলাতে আরও দক্ষ করে তুলতে পারেন , সুতরাং এটি একটি rmকমান্ড লাইনের (xargs এর মতো) একাধিক আর্গগুলি ব্যাচ করে
পিটার

উত্তর:


20

আপনি সাধারণত এটিকে ম্যানুয়ালি কনফিগার করেছেন তবে সাধারণত আপনি কেবল শেল থেকে বেরিয়ে যাওয়ার সময় সম্পাদন দেখতে পাবেন। তবে আপনি যে প্যাকেজ ইনস্টল করেছেন তার মধ্যে একটি বাশ প্রস্থান শেল স্ক্রিপ্ট নিয়ে এসেছে ...

পরীক্ষা করুন;

~ / .Bash_logout

সম্ভবত আপনি সেখান থেকে একটি স্ক্রিপ্ট কল পাবেন, এটি একটি বিজোড় ...


ওপি লগআউট সম্পর্কে কথা বলছিল না তবে শেল থেকে বেরিয়ে আসার কথা বলছিল।
কাউন্টারমোড

1
@countermode, তারা রাষ্ট্র না যে এটা ছিল না লগ-ইন শেল যে তাদের টার্মিনাল সেশনে দৌড়াচ্ছিলাম।
ilkkachu

আমি লগইন শেলটিতে আছি এবং <code> লগআউট </ কোড> এর কল দিয়ে এই আচরণটি ঘটে। আমার <code>। / .Bash_logout </code> এ আমার একটি লাইন আছে
arie64

<code>-xdev / (-name * name -o -name ./*~ -o -name core) -exec \ rm '{}' /; </code> যা মন্তব্য করার পরে ত্রুটিটি করে না ঘটতে পারে। সুতরাং আমি মনে করি মন্তব্যগুলি যেখানে সঠিক, এই লাইনটি অস্থায়ী ফাইলগুলি মোছার চেষ্টা করছে। ধন্যবাদ!
arie64

4
@ arie64 - "<কোড>" মন্তব্যগুলিতে কাজ করে না। এসই-তে মন্তব্যগুলির মধ্যে কোড নির্দেশ করতে, কোডের আগে এবং পরে " ` "(গ্রেভ-অ্যাকসেন্ট / বাম-একক-উদ্ধৃতি) ব্যবহার করুন। লাইক: `সন্ধান-এক্সদেব ...` পেতে find -xdev ...
কেভিন ফেগান

25

man bash

  exit [n]
         [...]  A trap on EXIT is executed before the shell terminates.

এই ধরনের ফাঁদগুলি প্রস্থান করার সময় প্রায়শই টেম্পফিলগুলি পরিষ্কার করতে ব্যবহার করা হয়, দেখুন /programming/687014/removing-created-temp-files-in-

এটির মতো একটি প্রস্থান ফাঁদ সংজ্ঞায়িত করুন (নতুন শেলটিতে আরও ভাল পরীক্ষার জন্য):

$ bash
$ trap "rm filetodelete" EXIT

নির্ধারিত এক্সিট ট্র্যাপ দেখান:

$ trap -p EXIT
trap -- 'rm filetodelete' EXIT

টেস্ট:

$ exit
rm: cannot remove filetodelete’: No such file or directory

নোট exitযেটিকে "অন্তর্নিহিতভাবে" বলাও যেতে পারে। সুতরাং পরিবর্তে exitআপনি দ্বারা ফাঁদ ট্রিগার করতে পারে kill -HUP $$


উল্লেখযোগ্য মূল্য type -a exit-> exit is a shell builtinআপনি কীভাবে help exitপ্রথম স্থানে বাশ ম্যান পৃষ্ঠা (বা মানুষের পরিবর্তে চালানো ) পড়তে জানেন ।
পিটার কর্ডেস

10

exitকমান্ড একটি বিশেষ বিল্ট-ইন শেল কমান্ড। শেল প্রক্রিয়াটি প্রস্থান করার জন্য এটি বিল্ট-ইন করতে হবে।

এটি শেলটি প্রস্থান করে প্রস্থান স্থিতির সাথে প্রস্থান করা হয় যদি থাকে বা অন্যথায় শেষ কমান্ডটি থাকে।

প্রস্থান করার পরে, শেলটি EXITযদি থাকে তবে ফাঁদগুলি চালাবে । trapবর্তমানে সেট করাগুলির জন্য (বোর্নের মতো শেলগুলিতে) আউটপুট দেখুন ।

অনেক শাঁস সঙ্গে, যদি শেল (কিছু সিস্টেম / ব্যবহারকারীরা টার্মিনালে emulators কনফিগার লগ-ইন শেল শুরু করার জন্য) একটি লগ-ইন শেল হিসাবে চালানো হয়েছিল, এটি বিশেষ ফাইল সঞ্চিত কোডের মত চালানো হবে ~/.logout, ~/.zlogout, ~/.bash_logoutএবং সম্ভবত বেশী সংশ্লিষ্ট /etcশেল উপর নির্ভর করে ।

এই আদেশগুলি কোথা থেকে চালিত হচ্ছে সে সম্পর্কে ধারণা পেতে আপনি set -xকল exitকরার আগে একটি কাজ করতে পারেন ।


ডিবাগ করার জন্য দুর্দান্ত পরামর্শset -x
glenn jackman

আপনি একটি লগ পেতে পারেন set -xএকটি উপায় যে স্পষ্ট বা না করবে ঘনিষ্ঠ টার্মিনাল পরে এটি থেকে প্রস্থান, হয়তো বা করে উভয় চলমান ব্যাশ দ্বারা আউটপুট set -x, exec &> exit_log.txtতারপর অন্ধ টাইপ exit
পিটার কর্ডস

3

exitবাশের একটি "বিল্টিন" কমান্ড, সুতরাং কোনও man exitআশ্চর্যরূপে সাহায্য করা যায় না।

যথাযথ ডকুমেন্টেশন ম্যানুয়াল পৃষ্ঠাগুলি থেকে man bashবা helpব্যাশ ( help exit) এর বিল্টিন কমান্ডের সাহায্যে পাওয়া যাবে ।

$ help exit
exit: exit [n]
    Exit the shell.

    Exits the shell with a status of N.  If N is omitted, the exit status
    is that of the last command executed.
$

আপনি যদি সত্যিই এটি কীভাবে কাজ করে তা জানতে চান তবে উত্সটি একবার দেখুন: http://git.savannah.gnu.org/cgit/bash.git/tree/builtins/exit.def?h=bash-4.4

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