क्या यूनिक्स में एक बहु-शब्द कमांड को उपनाम देने का एक तरीका है?


11

मैं कमांड को अलियास करने की कोशिश कर रहा हूं, sudo shutdownलेकिन मेरे अंदर .profileमैं बस नहीं कर सकता alias "sudo shutdown"="my command"। क्या यूनिक्स में बहु-शब्दीय उपनामों का एक और तरीका है?


मैंने इन सभी तकनीकों की कोशिश की और वे सभी काम कर गए! सभी को धन्यवाद!
agentbanks217

मेरे संपादन में भी समाधान का प्रयास करें , जैसा कि मैंने महसूस किया कि आप वास्तव में एक बहुत ही देर से उर्फ ​​के रूप में 'सूदो बंद' का इरादा रखते हैं।

जवाबों:


19

उपनाम नाम बाईं ओर है, इसलिए आपके पास दाईं ओर कोई भी बहुस्तरीय कमांड हो सकती है:

alias my_alias="multi worded command"

EDIT: हालाँकि, यदि आप वास्तव में कई शब्दों के उपनामों को रखना चाहते हैं - आपके उदाहरण में, यदि आप वास्तव में "सूडो शटडाउन" चाहते हैं, तो आप उपनाम के रूप में काम कर सकते हैं, आप निम्नलिखित उपनाम सुविधा का उपयोग करके (bash मैन्युअल में) कर सकते हैं ):

A trailing space in  value causes the next word to be checked for
alias substitution when the alias is expanded.

इसलिए, यदि आप अभी भी sudoअन्य आदेशों के साथ उपयोग करना चाहते हैं, लेकिन नहीं shutdownऔर यदि आप किसी अन्य shutdownचीज के लिए अन्य चीजों का उपयोग कर सकते हैं , तो आप कर सकते हैं:

alias sudo='sudo '
alias shutdown="echo nope"

अब, sudo anything_elseउम्मीद के anything_elseमुताबिक काम करेंगे (यह मानते हुए कि आपके पास इसके लिए कोई उपनाम नहीं है , लेकिन अगर आपके पास यह काम नहीं होता तो या तो इससे पहले); लेकिन sudo shutdownइसके बराबर होगा sudo echo nopeऔर यह उस स्ट्रिंग को प्रिंट करेगा।


2
धन्यवाद, रेखांकित जवाब; मैं alias cd="cd "एकल-पत्र उपनामों के साथ alias X="<directory-with-long-name>"जगह से अधिक आसानी से कूदने के लिए उपयोग कर रहा हूं ।
ल्यूक डेविस

सहमत, यह वास्तव में सुपर उपयोगी है। मैं गलत कमांड टाइप करता हूं, यह मेरे लिए यह alias gti="git "alias lgo="log"
सॉल्व करता है

4

एक समारोह का उपयोग करें:

foo() { if [ "$1" = "bar" ]; then echo "doing something..."; fi; }

आप शायद एक elseकेस चाहते हैं ताकि मूल कमांड barfoo() { if [ "$1" = "bar" ]; then echo "doing something..."; else command foo "$@"; fi; }
चले

2

से उद्धृत करने के लिए: बैश: उपनाम में नाम

बैश प्रलेखन राज्यों "लगभग हर प्रयोजन के लिए, खोल कार्यों उपनाम से अधिक पसंद कर रहे हैं।" यहां एक शेल फ़ंक्शन है जो तर्क (यदि केवल) से युक्त है, तो lsआउटपुट को प्रतिस्थापित करता है और पाइप करने का कारण बनता है ।more-la

ls() {
    if [[ $@ == "-la" ]]; then
        command ls -la | more
    else
        command ls "$@"
    fi
}

एक-लाइनर के रूप में:

ls() { if [[ $@ == "-la" ]]; then command ls -la | more; else command ls "$@"; fi; }

स्वचालित रूप से पाइप उत्पादन:

ls -la

1

आप काम के रूप में डैश का उपयोग कर सकते हैं: alias sudo-shutdown="your command"


1

मैं सिर्फ एक निष्पादन योग्य फ़ाइल / usr / लोकल / बिन में रखना सुनिश्चित करता हूं (सुनिश्चित करें कि यह आपके रास्ते में है) जिसमें तब वह कमांड शामिल हैं जिन्हें मैं चलाना चाहता हूं। स्क्रिप्ट का नाम कमांड होगा जो आता है। chmod + x / usr / स्थानीय / बिन / your_script सुनिश्चित करें।

इसलिए स्क्रिप्ट को 'शटडाउन' कहा जा सकता है

फ़ाइल शटडाउन की सामग्री होगी:

#!/bin/sh
sudo shutdown

यह एक पूरी नई दुनिया को खोलता है। फिर आपके पास कुछ कमांड या स्क्रिप्ट भी हो सकती है:

#!/usr/bin/env python
print "hi"
# more stuff. ....
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.