fc
ইতিহাসের কমান্ডগুলি সম্পাদনা ও পুনরায় সম্পাদন করতে তৈরি করা বাশ শেলের অন্তর্নির্মিত কমান্ড ।
এটি সাইগউইনেও উপস্থিত রয়েছে এবং এটি লিনাক্সের যে সমস্ত বিতরণে আমি পরীক্ষা করেছি তার উপর এটি কাজ করে:
fc -s '\'='/' -1
কিছু ব্যাখ্যা
আপনি কেন "প্রতিস্থাপন ব্যর্থ" হচ্ছেন সে সম্পর্কে আরও কিছু শব্দ
দেখে মনে হচ্ছে যে এই s
সংশোধকটির জন্য ব্যাকস্ল্যাশ চরিত্রের বিকল্পটি এখনও প্রয়োগ করা হয়নি \
, এটি হ'ল পালানো। নিশ্চিত হওয়ার জন্য আমাদের বাশ ইতিহাসের প্রসারণের gnu সংস্করণটির কোডটি দেখতে হবে (তবে আপনি যা করার চেষ্টা করছেন তা পাওয়ার জন্য উপরের আদেশটি ছিল ... তাই আমি এটিকে অলস মনে করি ....)।
কিছু নোট:
আমরা চিন্তা করতে নেতৃত্ব দিচ্ছি যে এটি আমাদের সাথে কাজ করার মতো প্রতিটি রেজিএক্স কার্যকর করবে sed
, তবে এটির নিশ্চয়তা নেই। ব্যাকস্ল্যাশ হ'ল বিস্তারের পালানোর চরিত্র এবং সমস্যাটি এখানে। তদুপরি সম্প্রসারণের আচরণটি shopt
বিকল্পগুলির সাথে সম্পর্কিত , সুতরাং আমাদের কেস কেসে দেখা শুরু করা উচিত ...
আপনি যখন cd C:\Foo\Bar
আপনার বাশ শেলের স্ট্রিংটি পেস্ট করবেন তখন এটি প্রসারিত হবে এবং এটি দোভাষী হিসাবে উপস্থিত হবে cd C:FooBar
; এই ফর্মটিতে এটি $_
অভ্যন্তরীণ ভেরিয়েবলেও সংরক্ষণ করা হবে।
তাহলে আপনি যদি এর পরিবর্তে আটকানো cd "C:\Foo\Bar"
বা cd 'C:\Foo\Bar'
মধ্যে $_
পরিবর্তনশীল আপনাকে খুঁজে উচিত C:\Foo\Bar
।
যেহেতু ইতিহাসের সম্প্রসারণ সম্পূর্ণ লাইনটি পড়ার সাথে সাথেই সম্পাদিত হয়, শেলটি শব্দগুলিতে বিভক্ত হওয়ার আগে, আপনি এটি কিছুটা বাশিজমে আরও কম-বেশি প্লেইন দিয়ে ব্যবহার করার জন্য প্রলুব্ধ হতে পারেন (যেমন যোগ হতে পারে :p
বা :q
, ""
, পার্সিং এবং আরও ...)
!!:0 ${_//\\/\/}
এই মুহুর্তটি মনে রাখতে হবে যে পথ এবং ফাইলের নামগুলি নিয়ে খেলা শুরু করা নিরাপদ নয় , বিশেষত যদি তারা উইন্ডোজ ক্লিপবোর্ড থেকে আসে (সাধারণভাবে পৃষ্ঠাটি কেন বিশ্লেষণ করেন না কেন ls
? ) এটি মূলত ট্যাব ব্যবহারের সম্ভাবনার সাথে সম্পর্কিত, ফাইলের নাম এবং ডিরেক্টরিগুলির জন্য সঠিক অক্ষর হিসাবে স্পেস এবং নিউলাইনগুলি ...)।
তদুপরি যখন আপনি মাউসের সাহায্যে নেওয়া কোনও পাঠ্য পেস্ট করবেন তখন আপনি একটি শীর্ষস্থানও আটকে দিতে পারেন। এটি এড়াতে পারে যে আপনার আদেশটি ইতিহাসে শেষ হবে (এটি শেল অপশন থেকে নির্ভর করে ...)। যদি তাই হয় তবে আপনার নিম্নলিখিতগুলি !!
একটি নিয়ন্ত্রিত কমান্ড হবে ... ( অন্য উত্তরের উদাহরণ দেখুন )।এটি একটি অবিবাহিত বাস্তব ঝুঁকি ।
উপসংহার
ইতিহাস বিস্তৃতি ইতিহাস তালিকা থেকে শব্দগুলি ইনপুট প্রবাহে প্রবর্তন করে, কমান্ডগুলির পুনরাবৃত্তি করা সহজ করে তোলে, বর্তমান ইনপুট লাইনে কোনও পূর্ববর্তী কমান্ডে যুক্তি সন্নিবেশ করায় বা পূর্ববর্তী কমান্ডগুলিতে ত্রুটিগুলি দ্রুত সমাধান করে।
যদি এটি সহজ না হয় তবে আমি ভাবতে শুরু করি যে আমরা কিছু ভুল করছি ;-)
অ্যাড বমিঃ সামান্য পরীক্ষা
আমি histverify
তখন শেল সক্রিয় করেছি ...
shopt -s histverify
echo C:\Foo\Bar
!!:s|C|D| {1,2}A
তারপরে আমি টিপছি Enterএবং যাচাই করা প্রসারণ হিসাবে আমি খুঁজে পাই
echo D:\Foo\Bar {1,2}A
তারপর আমি Enterআবার টিপুন এবং এটি প্রতিধ্বনিত
D:FooBar 1A 2A
এটি ইঙ্গিত করে যে ব্রেস প্রসারণেরsubstitution failed
আগে প্রক্রিয়াজাতকরণের ইতিহাসের প্রসারণে উত্পন্ন হয়েছিল , তাই প্রথমত , এবং এটি নিশ্চিত করে মনে হয় যে ইতিহাস সংশোধক ( চরিত্রের ) প্রতিস্থাপনকে সত্যিকারের রেজেক্স হিসাবে প্রক্রিয়া করেনি । ..s
\
cd 'C:\foo\bar'