ব্যাশে কোনও আদেশের সংজ্ঞা দেওয়া কি সম্ভব?


25

উদাহরণস্বরূপ, আমি সেট করতে পারি:

gb = cd /media/Dan/evolution

... যাতে প্রতিবার আমি ব্যাশে এক্সিকিউট gbকরি, আমি কি cdসেই বিশেষ ডিরেক্টরিতে পারি?

আমি অনলাইনে কিছু পেয়েছি: aliasকমান্ড। তবে মনে হয় এটি উপরের কাজটি করতে পারে না।

এটা কি সম্ভব? কিভাবে?


10
alias gb='cd /media/Dan/evolution'
Nykakin

4
@ জেন, দয়া করে উত্তরটি গ্রহণ করুন যদি এটি সমস্যার সমাধান করে। এই ইস্যুটি সমাধানে আপনাকে যে ব্যবহারকারীকে ধন্যবাদ জানিয়েছিলেন এটিই একটি অঙ্গভঙ্গি :)
রমেশ

2
দ্রষ্টব্য: এটি বাশ সম্পর্কে: লিনাক্স একটি কার্নেল। লিনাক্স প্রায়শই, ভুলভাবে পুরো অপারেটিং সিস্টেমের জন্য ব্যবহৃত হয়। এর ফলে বিভ্রান্তির সৃষ্টি হতে পারে। উদাহরণস্বরূপ, "লিনাক্সের অধীনে আমি কি এই জাতীয় কাজ করতে পারি?" প্রশ্নটি যদি আপনি এটি কোনও কম্পিউটারে করতে পারেন তবে হ্যাঁ। কারণ আপনি যে কোনও অপারেটিং সিস্টেমটি আপনার পছন্দ করতে পারেন লিনাক্স কার্নেল ব্যবহার করতে পারেন। সুতরাং আমাদের জানা দরকার যে আপনি কোনটি, আপনি উবুন্টু জ্ঞু + লিনাক্স + সম্ভবত এক্স 11 ব্যবহার করছেন (যদি কোনও ডেস্কটপে থাকে তবে কোনও ডিসপ্লে ছাড়া কোনও সার্ভার নয়)।
ctrl-alt-delor

@ রিচার্ড গুড পয়েন্ট, যদিও প্রযুক্তিগতভাবে এটি posixঅভিযোগ, তাই শুধু নয় bash

1
@ রিচার্ড প্রকৃতপক্ষে, এটাই সমস্যা। এটি কাজ করে যেহেতু লোকেরা অ্যান্ড্রয়েড এবং এই জাতীয় স্বাদগুলি কম বা কম বোঝায় না। আমি বলছি না এটি একটি ভাল জিনিস, তবে এটি যা তা তা। আমি আপনার লিনাক্স বিবৃতিতে মন্তব্য করার পরে আমার রেফারেল অন্তর্ভুক্ত ছিল। বিষয়টি বিভ্রান্তিকর শব্দ হওয়ায় আমি কেবল নিজেকে পরিষ্কার করে দিচ্ছিলাম। (আমি আপনার শেষ মন্তব্যটি ভুল বুঝেছি)
কীজার

উত্তর:


50

লিখো:

alias gb='cd /media/Dan/evolution'

এই সেটিংটি স্থায়ী করার জন্য (যাতে আপনি পুনরায় আরম্ভ করার পরে বা অন্য কোনও কনসোল খোলার পরে এটি আটকে যায়) এই লাইনটি ফাইল to / .bashrc এ যুক্ত করুন (ধরে নিবেন আপনি বাশটিকে আপনার ডিফল্ট শেল হিসাবে ব্যবহার করেন)


এটিকে আরও সুন্দর করে তোলার জন্য, আপনি আপনার উপনামগুলির জন্য একটি উত্সর্গীকৃত উরফ ফাইল তৈরি করতে পারেন, say / .bash_aliases বলুন এবং আপনার ~ / .bashrc ফাইলের মধ্যে থেকে এটিকে কল করুন: [-e ~ / .bash_aliases] && b / .bash_aliases এইভাবে, আপনি অন্যান্য স্টাফ সহ ~ / .bashrc ফাইলটিকে "দূষিত" করবেন না।
GeertVc

39

এলিয়াসিংয়ের বিকল্প

gb() { cd /media/Dan/evolution; }

এটি শেল ফাংশন জিবি সংজ্ঞায়িত করে, যা কোনও আর্গুমেন্ট নেয় না এবং সিডি / মিডিয়া / ড্যান / বিবর্তন সম্পাদন করে। অন্যান্য পরামর্শ মতো, এটি ~ / .bashrc এ যুক্ত করা যেতে পারে


উপন্যাসের কমান্ড সংজ্ঞায়িত উরফ দেখায় এমন অসুবিধার সাথে আফাক যেমন একটি ফাংশন সংজ্ঞায়িত করে তার ফলে "অপ্রত্যাশিত আচরণ" হতে পারে। আমি সম্পূর্ণতার জন্য আপনাকে ভোট দিয়ে দেব :)
vfbsilva

7
আসলে তা না. এটি স্রেফ টাইপ করতে পারেন: ডিক্লেয়ার -f জিবি এটি দেখার জন্য
পল ক্যালাব্রো

11
এছাড়াও, এই বিকল্পটি আরও নমনীয় যে এটি আপনাকে আর্গুমেন্টগুলি গ্রহণ করতে এবং আপনার যা প্রয়োজন তা করতে ফাংশন সংজ্ঞায় আপনার কাস্টম যুক্তিকে যুক্ত করতে দেয় । উপকরণগুলি কেবল যুক্তিগুলি পাস করার এবং পূর্বনির্ধারিত ক্রিয়াগুলি করার অনুমতি দেয় ।
পল ক্যালাব্রো

5
@ পোলক্যালাব্রো আরও ভাল, type gbএটি যদি কোনও নাম বা কোনও ফাংশন হয় তবে কাজ করবে ।
স্পারহাক

সম্ভাব্য: { echo 'true() { : ; }' >./script ; . ./script ; command -V true ; command -V /usr/bin/true ; }- true is a shell function\n/usr/bin/true is /usr/bin/true- \nঅক্ষরগুলি আউটপুটে আক্ষরিক নতুনলাইন ছিল।
মাইকসার্ভ

11

এটি সম্ভব এবং aliasআপনি যে আদেশটি সন্ধান করছেন তা হ'ল। উদাহরণস্বরূপ alias ll="ls -l"বাশ আপনাকে llপরিবর্তে টাইপ করতে দেয় ls -l। অনুগ্রহ করে নোট করুন যে কোনও উলাম সেট করার সময় কোনও স্পেস ব্যবহার করা হয়নি। man aliasপাশাপাশি দরকারী হতে পারে।


-3

বিকল্পভাবে, একটি সি প্রোগ্রাম লেখা সম্ভব যা পছন্দসই কমান্ডটি কল করে এবং এটি / usr / bin এ সংরক্ষণ করে।

#include <stdio.h>
#include <string.h>

int main () {
    char command[50]; //notice you can change this to fit your needs
    int return_val;

    strcpy( command, "echo \"cd /media/Dan/evolution\" | bash -i" );
    return_val = system(command); 

   //this is equivalent to entering the command in a new bash, 
   //which will return and exit

    return return_val;
}

এটি সংকলন করতে, ডিরেক্টরিটি যেখানে উত্সটি সংরক্ষিত হয়েছিল সেখানে যান (ব্যাশে) এবং সম্পাদন করুন (আপনার সুডোর দরকার হতে পারে):

 gcc ./gb.c -o /usr/bin/gb

এখানে আরও গবেষণার পরে , আমি বুঝতে পেরেছি যে আপনার কমান্ডটি কেবল কমান্ডে system()অন্তর্নির্মিত ব্যাশের জন্য কাজ করবে না throw এজন্য আপনাকে একটি ইন্টারেক্টিভ ব্যাশের একটি উদাহরণ তৈরি করতে হবে এবং এটিতে আপনার আদেশগুলি প্রতিধ্বনি করতে হবে। এটি মাত্রাতিরিক্ত জটিল এবং সম্ভবত অকেজো, যদি না আপনি চান না, ধরুন, শেল স্ক্রিপ্টে কলটি সংক্ষিপ্ত করুন ( some_scriptপরিবর্তে sh ~/radgeRayden/Scripts/some_script)।

সিস্টেম () ফাংশনের জন্য রেফারেন্স


2
আপনি কি আসলে এটি চেষ্টা করেছিলেন? এটি কাজ করে না।
ডেনিস

1
একই কারণে যে sh -c "cd /media/Dan/evolution"কাজ করে না। ইঙ্গিত: সাবশেল
ডিজিটাল ট্রমা

5
cd/ সাবશેল ইস্যুগুলি একপাশে রেখে, সি প্রোগ্রামে শেল কমান্ড মোড়ানোর সুবিধা কী, যখন আপনি সহজেই (বা আরও সহজেই) সেই কমান্ডটি শেল স্ক্রিপ্টে রাখতে পারেন?
ডিজিটাল ট্রমা

1
এতে বিশেষজ্ঞ নন, তবে এ জাতীয় কিছু (আশাকরি, আরও কার্যকর কিছু) / ইউএসআর / স্থানীয় / বিনে রাখা উচিত নয়?
জো

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