টার্মিনাল বন্ধ না করে সমস্ত ভেরিয়েবল সাফ করুন


10

আমি জানতে চাই যে টার্মিনালটি বন্ধ না করে কমান্ড প্রম্পটে সংজ্ঞায়িত সমস্ত ভেরিয়েবলগুলি কীভাবে সাফ করবেন ?

উদাহরণস্বরূপ, যদি আমি কমান্ড প্রম্পটে একটি ভেরিয়েবল সেট করি:

$ a=1

এখন আমি $aটার্মিনালটি বন্ধ না করে ভেরিয়েবল (এবং একইভাবে সংজ্ঞায়িত আরও অনেক ভেরিয়েবল) মুছতে চাই । আমি ব্যবহার করতে পারতাম unsetতবে বড় সংখ্যা না থাকলে এটি ব্যাতিক্রম হবে। ভেরিয়েবলের


2
exec "$0"হতে পারে - তবে বিশ্বব্যাপী আপনি কী বোঝাতে চান তা বলা শক্ত ।
মাইকজার্ভ

3
কেন আপনি যে কাজ করতে চান?
হউক লেগেছে

1
@ হককিজিং আমি স্ক্রিপ্ট ব্যবহার করে অ্যারে নিয়ে কাজ করছি। আমি মাঝে মাঝে এটিতে একটি উপাদান যুক্ত করি। যার কারণে আমি পুরানো মানগুলির সাথে স্ক্রিপ্টটি চালাতে পারি না (যেহেতু অ্যারে পরিবর্তন করা হয়)। আমাকে টার্মিনালটি বন্ধ করে আবার নতুন অধিবেশন শুরু করতে হবে। আমি আশা করি আমি পরিষ্কার হয়েছি। যদি না দয়া করে আমাকে জানান :)
এডওয়ার্ড টরভাল্ডস

1
@ মুরু - তার $varসাথে সেভ করে রাখা একটি তালিকা পেয়েছে var=$(declare -p +F);যে কোনও ফাংশনের পক্ষে যুক্তি হিসাবে যা echo "${2%%=*}".উত্তরের আকারের সাথে কিছুটা সমস্যা রয়েছে - তবে আপনার পরিবেশটি বিশাল না হলে এটি কাজ করা উচিত।
মাইকজার্ভ

3
আপনি কী করতে চাইছেন তা আমার কোনও ধারণা নেই। আপনি কি ইন্টারেক্টিভ শেল বা স্ক্রিপ্টের কথা বলছেন? একটি ইন্টারেক্টিভ শেল থেকে চালিত স্ক্রিপ্টে সেট চলকগুলি প্যারেন্ট শেলকে প্রভাবিত করে না। আপনি কী অর্জন করতে চান তা আমাদের জানান, কোন মৃত পরিণতিটি আপনি তা অনুসরণ করছেন না
গিলস 'দুষ্ট হওয়া বন্ধ করুন'

উত্তর:


10

আপনি যদি করেন (জিএনইউ কোর্টিল)

exec env --ignore-environment /bin/bash

আপনি একটি নতুন এবং নতুন পরিবেশ ব্যবহার করবেন



@edwardtorvalds $0হ'ল মৃত্যুদন্ড কার্যকর শেলের জিরোথ আর্গুমেন্ট। সুতরাং, আপনি যদি চালাচ্ছেন bash $0তবে bash (সম্ভবত - এটি সংস্করণের উপর নির্ভর করে -bashকোনও -lওগিন শেলের ক্ষেত্রে হতে পারে ) । আপনি যদি কোনও #!/bin/bashব্যাংলাইন সহ কোনও স্ক্রিপ্ট চালাচ্ছেন $0তবে এটিই স্ক্রিপ্টের পথ। exec "$0"সম্ভবত আরও নমনীয়, তবে exec bashআরও স্পষ্ট। যদি আপনি কোনও টার্মিনালে সেই কমান্ডটি প্রবেশ করেন, bashএটি একটি ইন্টারেক্টিভ পরিবেশে সনাক্ত করা উচিত এবং এর সমতুল্য করা উচিত bash -i- যা আপনার ~/.bashrcফাইলটি চালিয়ে দেবে ।
মাইকজার্ভ

এটি এর সাহায্য করে না export a=123, সেই পরিবর্তনশীল উত্তরাধিকার সূত্রে প্রাপ্ত হয় ...
উত্তেজক

1

আপনি ব্যবহার করতে পারেন env, যা জিএনইউ কোর্টিলগুলি সরবরাহ করে (সাধারণত জিএনইউ / লিনাক্স সিস্টেমে পূর্বেই ইনস্টল করা হয়):

exec env --ignore-environment /bin/bash

এক্সিকিউটিভ সিস্টেম কলটি যাতে আপনার বর্তমান প্রক্রিয়াটি আপনার শেলের নতুন, পরিবেশ-কম সংস্করণ দ্বারা স্থান-প্রতিস্থাপিত হয়।

যে কোনও রফতানি পরিবেশের ভেরিয়েবলগুলি সাফ করার জন্য এটির সুবিধা রয়েছে ।


তবে এটি আমার পরিবর্তিত PATH পরিবর্তনশীল পরিষ্কার করবে, উদাহরণস্বরূপ export PATH=$PATH:~/foo, ডান?
এডওয়ার্ড টরভাল্ডস

তুমি ঠিক. আমি আমার উত্তরটি পরিবর্তন করেছি যাতে শেলটির পরম পথটি $ 0 এর পরিবর্তে ব্যবহৃত হয়।
ব্যবহারকারী 30747

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