কোন অক্ষরগুলির উদ্ধৃতি ছাড়াই ফাইলগুলিতে পালানো দরকার?


12

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


আপনি কী করতে চাইছেন তা মোটেই পরিষ্কার নয়। এবং অটোকম্প্লিশন এর সাথে কোন কিছুর মিল রয়েছে?
মাইকেল Vehrs

@ মিশেলভিহার্স আমার mv filename filename-fooবাশ-এর কমান্ড রয়েছে, ফাঁকা স্থান এবং প্রথম বন্ধনী ছাড়াও আমার কোন চরিত্রের পালনের দরকার?
jcubic

@ মিশেলভিহার্স স্বয়ংক্রিয়রূপের উল্লেখ মুছে ফেলেছে।
jcubic

মূলত, সমস্ত শেল মেটাচার্যাক্টর, যেমন সাদা স্থান, শেল গ্লোবস, ইতিহাসের ইভেন্টগুলি। এই কারণে, আপনি বরং পৃথক অক্ষর পলায়নের পরিবর্তে, পুরো ফাইলের নাম উদ্ধৃত করা উচিত: mv "$filename" "$newname"
মাইকেল Vehrs

@ মিশেলভিহরস আমি জানি যে উদ্ধৃতি দিয়ে পালানো সমস্যা সমাধান করবে তবে উদ্ধৃতি ছাড়াই ফাইল নাম ব্যবহার করা আমার দরকার। আমার কাছে টার্মিনাল এমুলেটর রয়েছে এবং যখন ব্যবহারকারী কোট ব্যবহার করবেন না তখন এটি কাজ করা উচিত।
jcubic

উত্তর:


22

সহজ সমাধানটি হ'ল 'প্রথমে একক উদ্ধৃতি ( ) এবং শেষে অন্য একক উক্তি রাখা এবং 'ফাইলের নামের প্রতিটি অক্ষরকে 4-বর্ণের ক্রম দ্বারা প্রতিস্থাপন করা '\''। সমস্ত অক্ষর একক-উদ্ধৃত স্ট্রিংয়ের ভিতরেই তার বিশেষ অর্থটি হারিয়ে ফেলে, স্ট্রিংয়ের 'শেষটি চিহ্নিত করে except ক্রমটি '\''একক-উদ্ধৃত আক্ষরিক সমাপ্ত হয়, অবিলম্বে একটি উদ্ধৃত একক উদ্ধৃতি অনুসরণ করে এবং একটি নতুন একক-উদ্ধৃত আক্ষরিক খোলে। এইভাবে ফাইলের নাম

This file's name has some weird characters!
Will you manage to escape them?

নিম্নলিখিত হিসাবে উদ্ধৃত করা যেতে পারে:

somecommand 'This file'\''s name has some weird characters!
Will you manage to escape them?'

ডাবল উদ্ধৃতিতে আরও জটিল পালানোর নিয়ম রয়েছে এবং !যদি ইতিহাস প্রতিস্থাপন সক্রিয় হয় তবে আপনাকে বিস্মৃত চিহ্নটি অন্তর্ভুক্ত করার অনুমতি দেবেন না, সুতরাং আমি সেগুলি আরও বিবেচনা করব না।

ব্যাকস্ল্যাশ সহ অক্ষরগুলি রক্ষা করা একটি বিকল্প পদ্ধতি। এটি নিউলাইনগুলি বাদে প্রতিটি চরিত্রের জন্য কাজ করে; একটি নতুন লাইনের জন্য, এটি একক উদ্ধৃতি (বা ডাবল উদ্ধৃতি) এর মধ্যে রাখা একমাত্র সমাধান। আপনি যদি উদ্ধৃত নামটি ব্যবহারকারীর কাছে উপস্থাপনের জন্য ব্যাকস্ল্যাশগুলির সংখ্যা হ্রাস করতে চান, আপনি ব্যাকস্ল্যাশ প্রয়োজন এমন জায়গায় সীমাবদ্ধ রাখতে পারেন; তবে, আপনি যত বেশি ব্যাকস্ল্যাশগুলি বাদ দিবেন, ততই আপনার যেটি প্রয়োজন তা ভুলে যাওয়ার ঝুঁকি তত বেশি। চিঠি, সংখ্যা এবং ASCII অক্ষর সর্বদা ঠিক always আপনি যখনই অনিশ্চিত হন তখন উজ্জ্বল স্থান এবং বিরামচিহ্ন।

একটি সাধারণ শেল (ksh, bash বা zsh) দিয়ে আপনার কমপক্ষে কিছু পরিস্থিতিতে নিম্নলিখিত অক্ষরগুলি উদ্ধৃত করতে হবে।

  • হোয়াইটস্পেস (স্পেস, ট্যাব, নিউলাইন - মনে করে যে নিউলাইনগুলি ব্যাকস্ল্যাশ দিয়ে উদ্ধৃত করা যাবে না)।
  • ! - ইতিহাসের বিস্তৃতি।
  • " - শেল সিনট্যাক্স।
  • #- সাদা জায়গা দ্বারা পূর্বে মন্তব্য শুরু; zsh ওয়াইল্ডকার্ডস
  • $ - শেল সিনট্যাক্স।
  • & - শেল সিনট্যাক্স।
  • ' - শেল সিনট্যাক্স।
  • (- এমনকি একটি শব্দের মাঝখানে: ksh বর্ধিত গ্লোব (ব্যাশ এবং zsh এও উপলব্ধ); zsh ওয়াইল্ডকার্ডস
  • )(দেখুন ()
  • * - sh ওয়াইল্ডকার্ড
  • , - শুধুমাত্র ব্রেস প্রসারিত ভিতরে।
  • ; - শেল সিনট্যাক্স।
  • < - শেল সিনট্যাক্স।
  • = - zsh এ, যখন এটি কোনও ফাইলের নামের শুরুতে হয় (PATH চেহারা সহ ফাইলের নাম সম্প্রসারণ)।
  • > - শেল সিনট্যাক্স।
  • ? - sh ওয়াইল্ডকার্ড
  • [ - sh ওয়াইল্ডকার্ড
  • \ - শেল সিনট্যাক্স।
  • ] - আপনি এটিকে অব্যক্ত রেখে পালিয়ে যেতে পারেন।
  • ^- ইতিহাসের প্রসার; zsh ওয়াইল্ডকার্ড
  • ` - শেল সিনট্যাক্স।
  • { - বন্ধনী সম্প্রসারণ।
  • | - শেল সিনট্যাক্স।
  • } - জেডএস-এ পালানো দরকার, যখন খোলার কোনও মিল নেই other
  • ~- কোনও ফাইলের নামের শুরুতে হোম ডিরেক্টরি সম্প্রসারণ; zsh ওয়াইল্ডকার্ড; সর্বদা নিরাপদ যখন এটি শেষ চরিত্র।

আরও কয়েকটি চরিত্রের মাঝে মাঝে বিশেষ হ্যান্ডলিংয়ের প্রয়োজন হতে পারে:

  • -শেলটির জন্য বিশেষ নয়, তবে এটি যখন কমান্ড আর্গুমেন্টের শুরুতে হয়, এটি একটি বিকল্প নির্দেশ করে। এটি উদ্ধৃতি দিয়ে সুরক্ষিত করা যায় না যেহেতু বিশেষ হ্যান্ডলিং কমান্ডে রয়েছে, শেলটিতে নয়। শুরু হওয়া কোনও ফাইলের নাম সুরক্ষার জন্য -, আপনি ./এটির আগে রাখতে পারেন - এটি এখনও একই ফাইল, তবে যুক্তিটি -আর শুরু হয় না।
  • .নিজের মধ্যে বিশেষ নয়, তবে ডট ফাইলগুলি *ডিফল্টরূপে গ্লোবগুলি থেকে বাদ দেওয়া হয়।
  • :শেলটির জন্য বিশেষ নয়, তবে কিছু কমান্ড এটি বিশেষভাবে পার্স করে, যেমন দূরবর্তী ফাইল ( hostname:filename) নির্দেশ করতে । কলোনযুক্ত ফাইল নামগুলি কীভাবে মোকাবেলা করতে হয় তার জন্য কমান্ডের ডকুমেন্টেশনের সাথে পরামর্শ করুন।

¹ ব্যবহারকারী বিকল্প ইতিহাস প্রসারণ অক্ষর কনফিগার না করা অবধি । কিছু শেল এটির অনুমতি দেয়। ব্যাকস্ল্যাশগুলির চেয়ে একক উদ্ধৃতি ব্যবহারের এটি অন্য কারণ is


কমপক্ষে LFশুধুমাত্র নিউলাইনগুলি কিছু শেলের মধ্যে ব্যাকস্ল্যাশ দিয়ে উদ্ধৃত করা যেতে পারে।
iBug

@iBug নং কোনও শ-মত শেলটিতে ব্যাকস্ল্যাশ + নিউলাইনটি একটি নতুন লাইনে নয়, খালি স্ট্রিংয়ে প্রসারিত হয়।
গিলস 'তাই মন্দ হওয়া বন্ধ করুন'

এটি একটি ভাল উত্তর, আপনাকে ধন্যবাদ। এই তথ্যটি 'আনুষ্ঠানিকভাবে' যেখানে পাওয়া যায় তার কোনও লিঙ্ক আছে?
স্ল্যাশমেজ

1
@ স্ল্যাশমাইস কি তথ্য? শেল ভাষার বাক্য গঠনটি বিভিন্ন ম্যানুয়াল এবং বিশেষ উল্লেখগুলিতে "আনুষ্ঠানিকভাবে" উপলভ্য, তবে সেখান থেকে ঠিক কোন অক্ষরটি উদ্ধৃত করা দরকার যেখানে সম্পূর্ণ সরল নয়।
গিলস 'অশুভ হওয়া বন্ধ করুন'

1
আমি এটিও পেয়েছি: tecmint.com/manage-linux-filenames-with-spected-characters - এটি আপনার তালিকার মতো কমপ্যাক্ট নয়, তবে এর প্রচুর উদাহরণ রয়েছে। (বাই-দ্য বাই: "কী তথ্য?" কোনও শীতল প্রতিক্রিয়া নয় যখন এখানে বিষয়গুলি চরিত্রগুলি নিয়ে উদ্বেগ প্রকাশ করে)
স্ল্যাশমেজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.