গ্লোববিং ব্যবহার করার সময় আমি কি `rm` ইন্টারেক্টিভ তৈরি করতে পারি? (বাশ বা জেডএস বা উভয় ক্ষেত্রে)


15

আমি যখনই rmশেল গ্লোব্বিংয়ের সাথে একবারে একাধিক আইটেমগুলি দেখি এবং এমনকি প্যাটার্নটি যতটা আশা করি তার চেয়ে বেশি প্রসারিত হওয়ার সামান্যতম সম্ভাবনাও রয়েছে, আমি সর্বদা যুক্ত করার কথা মনে রাখার চেষ্টা করি -i, তবে (অবশ্যই) আমি ভুলতে এবং ঘটনাক্রমে কোনও কার্যকর জিনিসটি ফেলে দিতে পারি। কিছু লোক একটি সমস্যা সমাধানের চেষ্টা করে যেমন একটি উলামের সাহায্যে, alias rm='rm -i'তবে আমি আরএমকে সবসময় ইন্টারেক্টিভ বানানোর ধারণাটিকে ঘৃণা করি কারণ আমি তখন -fসব সময় ব্যবহার করার অভ্যাসে চলে যাব , যা স্পষ্টতই পুরো উদ্দেশ্যকে পরাভূত করবে।

আমি যখন যা করতে চাই তা rmকেবল -iতখনই ব্যবহার করা হয় যখন আমি গ্লোব্বিং ব্যবহার করি এবং -fঅবশ্যই ওভাররাইড করা যায় -i, তাই আমি এখনও সাধারণ ডিরেক্টরিগুলি সম্পূর্ণরূপে উড়িয়ে দিতে পারি rm -rf junk

সুতরাং rm *blah*সত্যিই হবে rm -i *blah*কিন্তু rm blahটাইপ করা ঠিক কাজ করবে।

এটি বিভিন্ন শেলের মধ্যে কীভাবে সম্পন্ন হতে পারে তার মধ্যে পার্থক্য থাকলে, আমি এমন একটি উত্তর বেছে নেব যা বাশ এবং জ্যাশ উভয়ের উত্তর সরবরাহ করে যেগুলি কেবল একটি বা অন্যটিকে কভার করে methods


দ্রষ্টব্য : আমি আসলে নিশ্চিত নই যে এটি অগত্যা একটি ভাল ধারণা; আমি কেবল জিজ্ঞাসা করছি এটি সম্ভব কিনা। আপনি যদি মনে করেন এটি একটি নির্বোধ ধারণা, আপনার মতামতের পিছনে যুক্তি শুনে আমি খুব খুশি হব, তবে দয়া করে উত্তর ক্ষেত্রে এমন মন্তব্য পোস্ট করবেন না । আসল উত্তরগুলি হয় আমাকে কীভাবে এটি করতে হয় তা ব্যাখ্যা করুন বা কেন এটি সম্ভব নয় তা ব্যাখ্যা করুন (অথবা সম্ভবত অনুরূপ ফলাফল পাওয়ার জন্য কোনও বিকল্প পদ্ধতির প্রস্তাব দেওয়া যেতে পারে)। তবে আপনি কেন এটি বোবা তা আমাকে বলতে চান, দয়া করে একটি মন্তব্য পোস্ট করুন। আমি উপসংহারের সাথে একমত না হলেও আমি যুক্তিসঙ্গত মন্তব্যগুলিকে উজ্জীবিত করব।


7
কয়েক প্রস্তাবনা: গনুহ ইউটিলিটি সঙ্গে, rm -Iভালো হয় -iযখন প্রায় তিন ফাইল বা যে শুধুমাত্র ট্রিগার -rপাস করা হয়েছে। ইন bash, Ctrl-x *গ্লোব সম্প্রসারণ করতে এবং এটি নিজেই পরিদর্শন করতে কীবোর্ড শর্টকাট ব্যবহার করুন।
jw013

2
বাশ সহ, আমি বিশ্বাস করি উত্তরটি "না"। Zsh এর সাহায্যে আপনি noglobউদাহরণস্বরূপ, rm এর সাথে aliasing ব্যবহার করতে পারবেন noglob my-rmএবং তারপরে আমার-আরএম স্ক্রিপ্ট হতে হবে যা একটি গ্লোব অনুসন্ধান করে, প্রসারিত করে এবং পাস করবে -i বা না। নিশ্চিত নয়, zsh জানেন না।
ডার্বোবার্ট

@ডারবার্ট: আপনি নিশ্চয়ই মনে হবেন আপনি zsh বেশ ভালো জানেন।
আইকনোক্লাস্ট

@ আইকনোক্লাস্ট নাপ, জেডএস নয়, কেবল গুগল। অদ্ভুতভাবে, আমি খুঁজে পেয়েছি যে এটি কীভাবে বাশে করা যায় তা অনুসন্ধান করার সময়। :
পি

যদি আপনি এমন কিছু চান যা দেখতে আরএম এর মতো দেখায় তবে বাস্তবে ভিন্নভাবে কাজ করে তবে আমার কাছে একটি স্ক্রিপ্ট (বা ওরফে / ফাংশন / ফাংশন কী) myrmলেখা উচিত এবং সেই স্ক্রিপ্টটি আপনাকে কী দুর্দান্ত জিনিস পছন্দ করতে দেয়।
ওয়াল্টার এ

উত্তর:


9

এটা সহজ না. সমস্যাটি হ'ল আপনি যখন:

rm -- *.txt

আরএম কেবল ফাইলগুলির তালিকা দেখেছে, গ্লোব্বিং প্যাটার্নটি নয় যা ইতিমধ্যে শেল দ্বারা প্রসারিত হয়েছে।

আপনি যা করতে পারেন তা হ'ল (zsh):

alias rm='noglob rm'

এটি zsh কে বলে যে আরএম কল করার সময় নিদর্শনগুলি প্রসারিত করা উচিত নয়। তারপরে আপনি আরএম কে একটি ফাংশন হিসাবে পুনরায় সংজ্ঞায়িত করতে পারেন যা নিজে নিজেই সম্প্রসারণ করে এবং "-i" যুক্ত করে যদি প্রয়োজন মতো কিছু হয়:

'rm'() {
  [[ "$*" = *[*[?]* ]] && set -- -i "$@"
  command rm $~@
}

যদিও এই পদ্ধতির সাথে সমস্যাটি হ'ল এই নতুন "আরএম" এর মধ্যে পার্থক্য দেখছে না

rm *

এবং

rm '*'

কল করা ফাইলটি সরাতে *আপনাকে এটি লিখতে হবে:

rm [*]

-1

ব্যাশে কাজ করে, সম্ভবত অন্যান্য শেলগুলিতে। আপনার মধ্যে রাখুন.bashrc

function rm() { 
  while test "${1:0:1}" = "-"; do 
    shift
  done
  if test $# -eq 1; then 
    command rm "$1"
  else 
    command rm -i "$@"
  fi
}

3
আপনি command rmহার্ড-কোডিং এড়ানোর জন্য ব্যবহার করতে পারেন PATH। এছাড়াও, যুক্তি গণনা যাচাইয়ের পদ্ধতির বিষয়টি কিছুটা অবিশ্বাস্য, কারণ rmবিকল্পগুলি নিতে পারে।
jw013

1
"$ 1" উদ্ধৃতি করা উচিত, বা পাস করা একক ফাইলের মধ্যে একটি জায়গা থাকলে এটি ব্যর্থ হবে। @ jw013 - আপনি কমান্ডটি এড়াতে পারেন, যেমন\rm
জর্ডানম

@ জোর্ডানম আপনি $1ডাবল উদ্ধৃতি দিয়ে উদ্ধৃতি দেওয়ার প্রয়োজনীয়তা সম্পর্কে সঠিক , তবে কমান্ড পালানোর বিষয়ে ভুল। উদ্ধৃতিটি কেবলমাত্র এলিয়াসগুলিকে দমন করে, লুক-আপ ফাংশন করে না । এই উত্তরটি কোনও উপাধি নয়, একটি উপকরণের পরামর্শ দিচ্ছে।
jw013

1
কমপক্ষে পুরানো সম্পাদনাটি কার্যকরী ছিল - নতুন সম্পাদনাটি ব্যবহারকারী কমান্ড লাইন বিকল্পগুলি বাতিল করে, যা সম্ভবত সঠিক জিনিস নয়।
jw013

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