উবুন্টু 17.04 - বাশ: সিডি: অনেকগুলি আর্গুমেন্ট


10

আমি সবেমাত্র আমার উবুন্টুকে 16.04 থেকে 17.04 এ আপগ্রেড করেছি এবং cdকমান্ড নিয়ে কিছুটা সমস্যা পেয়েছি ।

ধরা যাক যে আমার দুটি ফোল্ডার রয়েছে: album-01&album-02

উবুন্টু ১.0.০৪-এ, আমি যদি cd album*এটি করি তবে এটি প্রথম পাওয়া ফোল্ডারে যাবেalbum-01

তবে নতুন উবুন্টু 17.04 এ, যদি আমি cd album*এটি করি তবে আমার ফলাফল -bash: cd: too many arguments

cdউবুন্টু 17.04 এর মতো উবুন্টুতে কীভাবে তৈরি করবেন cd?


4
আপনি যা পান তা বোঝা যায় না, যেমন আপনি cdদুটি অবস্থান দেন এবং কোনওরকমভাবে এটি প্রত্যাশা করেন যে আপনি কোনটি চান।
মাইকেউইজ যা কিছু

1
@ মাইকিও যাইহোক দুর্ভাগ্যক্রমে, বাশ ম্যানুয়ালটি আপনার সাথে একমত নয়: "নিম্নলিখিত ডিরেক্টরি নিম্নলিখিত কোনও অতিরিক্ত যুক্তি উপেক্ষা করা হবে"
মুরু

3
একটি বাগ রিপোর্ট পোস্ট ক্ষেত্রে কারও আগ্রহী: bugs.launchpad.net/ubuntu/+source/bash/+bug/1683576
muru

যদি আপনার প্রশ্নটি সন্তুষ্টভাবে সমাধান করা হয় তবে তার বামে ধূসর বৃত্তাকার চেক বোতামটি ক্লিক করে যে উত্তরটি আপনাকে সবচেয়ে বেশি সহায়তা করেছে সেই উত্তরটি গ্রহণ করতে ভুলবেন না।
বাইট কমান্ডার

উত্তর:


9

আমি এটি এখনও একটি বাস্তব 17.04 সিস্টেমে পরীক্ষা করতে পারিনি (কেবল এটি 16.04-এ কাজ করে যাচাই করা হয়েছে), তবে cdআপনার নিজের কাস্টম ফাংশন দিয়ে বাশ অন্তর্নির্মিত কমান্ডটি ওভাররাইড করতে সক্ষম হওয়া উচিত , যা প্রথমটি ব্যতীত কোনও অতিরিক্ত যুক্তি বাতিল করে দেয় :

cd(){ command cd "$1" ; }

আপডেট: @ মুড়ির মন্তব্যে যেমন পরামর্শ দেওয়া হয়েছে , নীচের এই সংস্করণটি আরও ভাল কাজ করতে পারে এবং cdতর্ক ছাড়াই কলিং সমর্থন করে যদিও:

cd(){ builtin cd "${@:1:1}"; }

আপনি আপনার টার্মিনালে উপরে এই লাইনটি প্রবেশ করার পরে, দয়া করে cdএখন আপনার পছন্দ মতো আচরণ করে কিনা তা যাচাই করুন । যদি এটি হয় তবে আপনি নিজের ~/.bashrcফাইলটির শেষের দিকে এই লাইনটি যুক্ত করে এই ফাংশন সংজ্ঞাটিকে অবিচ্ছিন্ন করতে পারেন । অন্যথায় এটি আপনার বর্তমান শেল সেশনটি শেষ করার সাথে সাথে তা অদৃশ্য হয়ে যাবে।

মনে রাখবেন যে কোনও কারণে যদি আপনার cdএই কাস্টম ফাংশনের পরিবর্তে সাময়িকভাবে আসল বাশ অন্তর্নির্মিত কমান্ডটি ব্যবহারের প্রয়োজন হয় তবে আপনি কেবল প্লেইনের command cdপরিবর্তে এটি কল করতে পারেন cd


আমি একই জিনিসটি লিখছিলাম, ফাংশনটির পরিবর্তে আমি একটি ছোট্ট স্ক্রিপ্টের জন্য একটি
উলামের পরামর্শ দিচ্ছিলাম

@ রেভেক্সিনা আমি প্রথমে একটি উরফ ব্যবহার করার বিষয়টি বিবেচনা করেছি, তবে তারপরে এটি ফেলে দেওয়া হয়েছে কারণ আমি মনে করি এটি একটি উলামের সাহায্যে সম্পন্ন করা যাবে না, কারণ সেখানে যুক্তিগুলির উপর আপনার নিয়ন্ত্রণ নেই। কৌতূহলের বাইরে আপনি কোন পদ্ধতির পরামর্শ দিয়েছিলেন?
বাইট কমান্ডার

আমি একই জিনিসটি করেছি, আমি কেবল একটি .shফাইলটিতে কোডটি রেখেছি এবং তার পরে একটি নাম তৈরি করেছি:mcd="source /home/user/bin/cd.sh"
রাভেক্সিনা

আহ, ঠিক আছে. এটি হওয়া দরকারের চেয়ে কিছুটা জটিল, তবে এটিও কাজ করা উচিত।
বাইট কমান্ডার

2
cd () { builtin cd "${@:1:1}"; }পরিবর্তে সান্দিহাইডাট চেষ্টা করুন
মুড়ু

7

সংক্ষিপ্ত উত্তর / কর্মক্ষেত্র

এই সঠিক ক্ষেত্রে আপনার প্রশ্নের উত্তর দিতে, এটি কাজ করে

cd album*1

তবে সম্ভবত এটি কার্যকরভাবে আপনি চান কার্যকারিতা নয়।

কী বদলে গেল?

এটি প্রদর্শিত হয় যে config-top.hব্যাশ -৪.৪-এ নিম্নলিখিত বিকল্পটি যুক্ত করতে আপডেট করা হয়েছিল

/* Define CD_COMPLAINS if you want the non-standard, but sometimes-desired
   error messages about multiple directory arguments to `cd'. */

#define CD_COMPLAINS

এবং builtins/cd.defএখানে আপনার ত্রুটি বোঝায়:

#if defined (CD_COMPLAINS)
  else if (list->next)
    {
      builtin_error (_("too many arguments"));
      return (EXECUTION_FAILURE);
    }
#endif

আমি দীর্ঘমেয়াদী কী করতে পারি ?:

আপনি bashনতুন সিডি_কোম্প্লেইনস ছাড়া আপনার নিজের সংকলন করতে পারেন , তবে এটি ক্লান্তিকর হবে। আপনি cdএখানে প্রস্তাবিত মতো কার্যকারিতাটিকে নতুন করে সংজ্ঞায়িত করতে পারেন বা আপনি যেমন কোনও ফাংশন উলেস করতে পারেন

cd "$(find $1* | head -1)"

এটি প্রমাণ করা হচ্ছে

4.4 বিটা যেখানে এখনও এটি কাজ করে ততক্ষণ

#Pulling and unpacking source
$ wget https://ftp.gnu.org/gnu/bash/bash-4.4-beta.tar.gz
$ tar -xzvf bash-4.4-beta.tar.gz
$ cd bash-4.4-beta

#Building, go grab something to drink. It's gonna be a while.
~/bash-4.4-beta$ ./configure
~/bash-4.4-beta$ make

#Check Version
~/bash-4.4-beta$ ./bash --version
GNU bash, version 4.4.0(1)-beta (x86_64-unknown-linux-gnu)

#Enter a clean interactive prompt
~/bash-4.4-beta$ env -i PATH="$PWD:$PATH" ./bash --noprofile --norc

#Test example
bash-4.4$ mkdir album-0{1..2}
bash-4.4$ cd album* && pwd
/home/gkent/bash-4.4-beta/album0-1

4.4 স্থির প্রকাশ যেখানে এটি কাজ করে না

#Pulling and unpacking source
$ wget https://ftp.gnu.org/gnu/bash/bash-4.4.tar.gz
$ tar -zxvf bash-4.4.tar.gz
$ cd bash-4.4/

#Building, go grab something to drink. It's gonna be a while.
~/bash-4.4$ ./configure
~/bash-4.4$ make

#Check Version
~/bash-4.4$ ./bash -version
GNU bash, version 4.4.0(1)-release (x86_64-unknown-linux-gnu)

#Enter a clean interactive prompt
~/bash-4.4$ env -i PATH="$PWD:$PATH" ./bash --noprofile --norc

#Test example
bash-4.4$ mkdir album-0{1..2}
bash-4.4$ cd album*
bash: cd: too many arguments

দুঃখিত, একটি টাইপ ছিল। আপডেট উত্তর।
গ্রেসন কেন্ট

আহ ঠিক. আপনি কেবলমাত্র বন্ধনী ছাড়াই শেষের সাথে cd alb*1আক্ষরিক মিল করতে পারেন 1। আমি প্রথমে আপনার ধারণাটি অন্য কিছু নিয়ে বিভ্রান্ত করেছি।
ilkkachu

5

আমি সর্বদা ট্যাব সমাপ্তি ব্যবহার করায় আমি কখনও এই সমস্যার মুখোমুখি হইনি

সুতরাং আপনার ক্ষেত্রে, আমি যে ডিরেক্টরিটি চাই তা সম্পর্কে একটি অনুমান অনুমানের পরিবর্তে, আমি টাইপ করব cd alTabযা যদি কেবল একটি ম্যাচ থাকে তবে এটি সম্পন্ন করে এবং যদি সেখানে 2 বা ততোধিক সংখ্যক সম্পূর্ণ হয় যেখানে মিলটি শেষ হয় এবং TabTabপছন্দগুলি তালিকাভুক্ত করে।

আমার সিস্টেমের একটি উদাহরণ এখানে:

cd Un Tab

cd Unknown

অনুসৃত দ্বারা TabTabউৎপন্ন

Unknown/                        Unknown Artist - Unknown Album/ 

2

এটি বাশের মতো একটি বাগের মতো দেখাচ্ছে: man builtinsপুরানো আচরণ অনুযায়ী সঠিক one

   cd [-L|[-P [-e]] [-@]] [dir]
              Change the current directory to dir.  if dir is not supplied,
              the  value  of  the  HOME shell variable is the default.  Any
              additional arguments following dir are ignored.

আপনি bug-bashমেলিং তালিকায় বাগটি রিপোর্ট করতে পারেন ; আরও বিশদ এখানে


আসলে, বাগটি রিপোর্ট করা হয়েছিল (অনেক আগে)। আপনি যদি এখনই একটি স্থির বাশ চান, এখন, এখন , এটি সঠিকভাবে কীভাবে করবেন তা এখানে (১..১০ তে পরীক্ষা করা উচিত, অন্যের সাথেও কাজ করা উচিত)।

কাজ করার জন্য প্রথমে একটি ডিরেক্টরি তৈরি করুন, উদাহরণস্বরূপ:

mkdir ~/bash
cd ~/bash

উত্স প্যাকেজ এবং বিল্ড নির্ভরতা পান:

apt-get source bash
sudo apt-get build-dep bash
cd bash-4.4

config-top.hএটি পরিবর্তন করতে সম্পাদনা করুন (লাইনের 32 হওয়া উচিত)

#define CD_COMPLAINS

এই

/* #define CD_COMPLAINS */

debian/changelogশীর্ষে এটিকে এডিট করুন এবং এন্ট্রি যুক্ত করুন (আপনি আদেশটিও ব্যবহার করতে পারেন dch -i):

bash (4.4-5ubuntu1+cd) artful; urgency=medium

  * Fix cd.

 -- Firas Kraiem <firas@fkraiem.org>  Thu, 04 Jan 2018 21:11:22 +0900

সবচেয়ে গুরুত্বপূর্ণ পয়েন্ট যোগ করতে চলেছেন +fooকরতে বর্তমান (সংস্করণ সংখ্যা fooআর সাবধান যদি আপনি ব্যবহার হতে ছোট হাতের অক্ষর কোন স্ট্রিং হতে পারে dch -i, এটা শেষ নম্বর, তাই আপনি বর্তমান এক থেকে এটি প্রত্যাবর্তন করতে প্রয়োজন বাড়ায় হবে) এবং ব্যবহার করা সঠিক প্রকাশের নাম ( artfulএখানে)। শেষ পর্যন্ত, চালান dpkg-source --commit

তারপরে আপনি debuildকমান্ডটি চালনা করতে পারেন এবং যদি সবকিছু ঠিকঠাক হয় তবে (ত্রুটিগুলি debsignউপেক্ষা করা যেতে পারে) আপনার .debপ্যারেন্ট ডিরেক্টরিতে এমন কিছু থাকা উচিত যা আপনি যথারীতি ইনস্টল করতে পারেন (এগুলি সমস্ত ইনস্টল করার দরকার নেই, কেবল আপনি যা ইনস্টল করতে পারেন এখন আছে; dpkg -l | grep bashখুঁজে বের করতে ব্যবহার করুন )।

নোট করুন যে নতুন প্যাকেজের সংস্করণ নম্বরটি সেট করা আছে যাতে আপনি ভবিষ্যতে কোনও আপডেট স্বয়ংক্রিয়ভাবে পাবেন bash; আপডেটটি সমস্যার সমাধান না করে থাকলে আপনাকে উপরের প্রক্রিয়াটি পুনরাবৃত্তি করতে হবে।

(এই উত্তরটি প্রথমে এই সদৃশ প্রশ্নের উপরে পোস্ট করা হয়েছিল ))

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