বাশের জন্য একটি উপাধিতে একাধিক কমান্ড


210

আমি এমন একটি উপাধি সংজ্ঞায়িত করতে চাই যা নিম্নলিখিত দুটি কমান্ড একটানা চালায়।

gnome-screensaver
gnome-screensaver-command --lock

এখনই আমি যুক্ত করেছি

alias lock='gnome-screensaver-command --lock'

আমার .bashrc এ তবে যেহেতু আমি আমার ওয়ার্কস্টেশনটি প্রায়শই লক করি তাই কেবল একটি কমান্ড টাইপ করা সহজ।

উত্তর:


390

চেষ্টা করুন:

alias lock='gnome-screensaver; gnome-screensaver-command --lock'

অথবা

lock() {
    gnome-screensaver
    gnome-screensaver-command --lock
}

আপনার .bashrc এ

দ্বিতীয় সমাধান আপনাকে যুক্তিগুলি ব্যবহার করতে দেয়।


7
এটি "ফাংশন লক () {ব্লাহ}" হওয়া উচিত নয়?
পান্নাজাজা

2
আপনি কীভাবে যুক্তিটি পাস করবেন? নেস্টিং ভেরিয়েবল 'msg' lock()প্যারেন্টেসিসের ভিতরে ত্রুটি প্রদান করে ' syntax error near unexpected token _' ..
জিওথেরি

8
ফাংশনটি সংজ্ঞায়িত হয়ে গেলে, এটি একটি কমান্ডের মতো আচরণ করে: আর্গুমেন্টগুলি কমান্ড লাইনে থাকে, হোয়াইটস্পেস দ্বারা পৃথক করা হয়। ঘোষণার অংশে, তর্কগুলি হ'ল $1, $2... ফাংশন বডিটিতে।
mouviciel

1
প্যারামের সাথে উপন্যাসের লাইনটি অন্তর্ভুক্ত না করার জন্য ডাউনভোট।
ফিলিপ রেগো

2
@ ফিলিপরেগো - আপনার কাছ থেকে শিখতে এবং আপনার উত্তরটিকে সমর্থন করতে পেরে আমি আনন্দিত হব
mouviciel

79

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

alias lock='gnome-screensaver && gnome-screensaver-command --lock'

এখন প্রথম কমান্ড সফল না হওয়া পর্যন্ত চেষ্টা করা হবে না। শর্ট সার্কিট মূল্যায়নের আরও ভাল বিবরণ এই এসও প্রশ্নে বর্ণিত হয়েছে ।


5
আশ্চর্যজনক, এই চেষ্টা git fetch && git pull origin masterএবং আমার জন্য কাজ করে নি যে পর্যন্ত না আমি প্রতিস্থাপিত &&সঙ্গে ;
হাকুনিন

3
সম্ভবত গিট আনার কারণে 0 ছাড়া অন্য কিছু ফিরে এসেছে?
রবউউ

সাহায্য করেছেন! কাজ আমার জন্য জুবুন্টু 16.04.3
ফার্নান্দো

প্যারামের সাথে উপন্যাসের লাইনটি অন্তর্ভুক্ত না করার জন্য ডাউনভোট।
ফিলিপ রেগো

18

ওরফে জন্য বোঝানো হয় aliasing কমান্ড নাম থাকবে না। এর বাইরে যে কোনও কিছুই ফাংশন দিয়ে করা উচিত।

alias ll='ls -l' # The ll command is an alias for ls -l

উপাধি হ'ল এমন নাম যা এখনও মূল নামের সাথে যুক্ত। llএটি একটি সামান্য নির্দিষ্ট ধরণের ls

d() {
    if exists colordiff; then
        colordiff -ur "$@"
    elif exists diff; then
        diff -ur "$@"
    elif exists comm; then
        comm -3 "$1" "$2"
    fi | less
}

একটি ফাংশন একটি নতুন কমান্ড যা অভ্যন্তরীণ যুক্তিযুক্ত। এটি কেবল অন্য কমান্ডের নাম পরিবর্তন নয়। এটি অভ্যন্তরীণ অপারেশন করে।

প্রযুক্তিগতভাবে, ব্যাশ শেল ভাষার উচ্চারণ ক্ষমতার মধ্যে এতটাই সীমিত যে তারা একক কমান্ডের চেয়ে বেশি কিছু অন্তর্ভুক্ত এমন কোনও কিছুর জন্য অত্যন্ত অসুস্থ । এগুলি একটি একক কমান্ডের একটি ছোট রূপান্তর করার জন্য ব্যবহার করুন, এর চেয়ে বেশি কিছু নয়।

যেহেতু উদ্দেশ্যটি হল একটি নতুন কমান্ড তৈরি করা যা একটি ক্রিয়াকলাপ সম্পাদন করে যা অভ্যন্তরীণভাবে অন্যান্য কমান্ডগুলিতে সমাধান করবে, তাই সঠিক উত্তরটি এখানে একটি ফাংশন ব্যবহার করা হবে:

lock() {
    gnome-screensaver
    gnome-screensaver-command --lock
}

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


আপনার উত্তরটি দিয়ে কোনও উদাহরণ সরবরাহ করতে পারলে সবচেয়ে ভাল হবে। আপডেটের জন্য অপেক্ষা করছি
সাজিদ আলী

1
প্যারামের সাথে উপন্যাসের লাইনটি অন্তর্ভুক্ত না করার জন্য ডাউনভোট।
ফিলিপ রেগো

2
@ ফিলিপরেগো এলিয়াসগুলি প্যারামিটার নেয় না। কমলা না হওয়ার জন্য আপেলকে ভোট দিন না। পরিবর্তে কমলা খান। উত্তরটি খুব ভালভাবে ব্যাখ্যা করার সাথে সাথে, এখানে সঠিক সরঞ্জামটি এলিয়াস নয় তবে ফাংশন।
lhunath

আমি এই জাতীয় পরামিতি বলতে চাই। আমি নেস্টেড উক্তিগুলি ভুল ব্যবহার করছিলাম। ওরফে = "গিট কমিট-এম 'ইনি'; গিট পুশ; গিট স্ট্যাটাস"
ফিলিপ রেগো

@ ফিলিপরেগো আপনার সত্যিই একটি ফাংশন ব্যবহার করতে হবে, একটি উলের নাম নয়। gps() { git commit -m 'init '; git push; git status; } যেমন ব্যাখ্যা করা হয়েছে, উপাধিগুলি অত্যন্ত সীমাবদ্ধ, ভঙ্গুর এবং তাদের একমাত্র উদ্দেশ্য হ'ল আদেশগুলির নাম পরিবর্তন করা। সম্পর্কহীন উদ্দেশ্যে তাদের অপব্যবহার করা আপনাকে গরম পানিতে নামিয়ে দেবে, যেমন আপনি সবেমাত্র অভিজ্ঞতা অর্জন করেছেন।
lhunath


4

এটি একের পর এক 2 টি কমান্ড চালাবে:

alias lock='gnome-screensaver ; gnome-screensaver-command --lock'

1

সুতরাং একটি আধা-কোলন ব্যবহার করুন:

alias lock='gnome-screensaver; gnome-screen-saver-command --lock'

আপনি যদি প্রথম কমান্ডটিতে যুক্তি সরবরাহ করতে চান তবে এটি ভাল কাজ করে না। বিকল্পভাবে, আপনার $ হোম / বিন ডিরেক্টরিতে একটি তুচ্ছ স্ক্রিপ্ট তৈরি করুন।


0

11 বছরের পুরানো আলোচনায় আমার 2 সেন্ট যোগ করার চেষ্টা করুন:

alias lock="gnome-screensaver \gnome-screensaver-command --lock"


0

আপনার এই ফাংশনটি যুক্ত করুন ~/.bashrcএবং আপনার টার্মিনালটি পুনরায় চালু করুন বা রান করুনsource ~/.bashrc

function lock() {
    gnome-screensaver
    gnome-screensaver-command --lock
}

আপনি যখন lockআপনার টার্মিনালে প্রবেশ করবেন তখন এই দুটি কমান্ড চলবে ।

আপনার নির্দিষ্ট ক্ষেত্রে একটি তৈরি করা aliasকাজ করতে পারে তবে আমি এটির প্রস্তাব দিই না। স্বজ্ঞাতভাবে আমরা ভাবতে পারি যে কোনও উপাধির মান একইভাবে চলবে যদি আপনি টার্মিনালে মানটি প্রবেশ করান। তবে ঘটনাটি না:

উপকরণের সংজ্ঞা এবং ব্যবহার সম্পর্কিত বিধিগুলি কিছুটা বিভ্রান্তিকর।

এবং

প্রায় প্রতিটি কাজের জন্য, শেল ফাংশনগুলি এলিয়াসগুলির চেয়ে বেশি পছন্দ করা হয়।

সুতরাং আপনার প্রয়োজন না থাকলে কোনও উপাধি ব্যবহার করবেন না। https://ss64.com/bash/alias.html


-3

এলিয়াসগুলি এর মধ্যে ঘোষণা করার সময় আমি একটি সমস্যায় পড়েছি ~/.bashrc। আমার টার্মিনালটি আমি ঘোষিত এলিয়াসগুলি সনাক্ত করতে পারি নি ~/.bashrc। আমি নিবন্ধটি থেকে শিখেছি (নীচে সংযুক্ত) যে ম্যাক ওএস এক্স login-shellডিফল্টরূপে চালিত হয় তাই এটি ~/.bash_profileপরিবর্তে কল করে ~/.bashrc

আপনার ডাকনাম ঘোষণার ক্ষেত্রে আপনি যদি একই সমস্যায় আসেন তবে সমস্যাটি সমাধানের জন্য আপনি নীচের লিঙ্কটি উল্লেখ করতে পারেন:

http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html


এই কিউএটি কোনও উপন্যাসে একাধিক কমান্ড সম্পর্কে, যেখানে এলিয়াসগুলি রাখবেন তা নয়।
ফেসবুকে

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