क्यों मानक आदेशों की अनुशंसा नहीं की जा रही है?


19

उदाहरण के लिए, मैंने ~/.bashrcफ़ाइल (या समतुल्य) में देखा एक सामान्य उपनाम है

alias rm='rm -i'

हालाँकि, मैंने देखा है कि लोग इसके खिलाफ सलाह देते हैं

  1. उपनाम किसी अन्य सिस्टम पर मौजूद नहीं हो सकता है और चूंकि आप लापरवाह हो गए हैं rm, इसलिए आप अनजाने में कुछ महत्वपूर्ण हटा दें। [1]
  2. इस उपनाम का उपयोग करके, आप अपने आप को टाइप करने के लिए yया yesप्रत्येक rmआदेश के बाद प्रशिक्षित करते हैं , जो पूरे उद्देश्य को हरा देता है।

क्या इसके खिलाफ सिफारिश करने के अन्य कारण हैं? हो सकता है कि कुछ कार्यक्रम rmइसके बजाय केवल कॉल करते हैं \rm, और इस पर सचेत करने से उनके लिए समस्याएँ हो सकती हैं?

मैं rmबस एक उदाहरण के रूप में उपयोग करता हूं, लेकिन मैंने अन्य आदेशों को देखा है cpया जैसे mvउपनामों द्वारा कवर किया गया है। व्यक्तिगत रूप से, मैं धीरे-धीरे खुद को इस तरह से एक उपनाम का उपयोग करने के लिए प्रशिक्षित कर रहा हूं rm -i:

alias trash=`mv -v -t $HOME/.Trash`

3
जब भी मैं एक डिफ़ॉल्ट उपनाम के साथ एक सिस्टम पर यात्रा करता हूं rm -i, तो यह मुझे स्वचालित रूप से -fध्वज जोड़ने के लिए थोड़ा और प्रशिक्षित करता है ।
जेंडर

आप अपनी rm -iइच्छानुसार किसी भी चीज को उर्फ ​​कर सकते हैं। इस तरह के रूप में del, irmआदि शामिल हो सकते नहीं है जरूरत है उर्फ यह करने के लिए rm। यह परिधि 1 बिंदु है, और चुनिंदा रूप से delया rmआप जो चाहते हैं उसके आधार पर, आप बिंदु 2 को कुछ अंश तक रोकते हैं।
मार्टिन टूरनोइज

जवाबों:


8

मान लें कि आप पार्टी का उपयोग कर रहे है कि, यह कारण गैर-सहभागी बैश के गोले के रूप में स्क्रिप्ट के लिए समस्या है, नहीं स्रोत क्या करना चाहिए ~/.bashrcया ~/.bash_profile(जो की संभावना या तो जहाँ आपका उपनाम रखा जाता है या किसी अन्य लिपि में अपने उपनाम सोर्सिंग के लिए पहला कदम है) । हालाँकि, यदि आप स्क्रिप्ट्स सोर्स कर रहे हैं तो यह समस्या हो सकती है:

$ alias echo='command echo foo'
$ cat > script << 'EOF'
> #!/bin/bash
> echo bar
> EOF
$ chmod a+x script
$ ./script
bar
$ . ./script
foo bar

आपका प्रश्न मौजूदा आदेशों के बारे में अधिक सामान्य चिंता के बारे में बताता है, प्रमुख यह है कि अपरिचित वातावरण जो पहली नज़र में समान दिखाई देते हैं, संभावित रूप से बेतहाशा अलग परिणाम उत्पन्न कर सकते हैं। उदाहरण के लिए उपघटन rmको rm -iअच्छे इरादों है, लेकिन कारणों से आप राज्य के लिए व्यवहार में बुरा है।


7

"क्या इसके खिलाफ सिफारिश करने के अन्य कारण हैं?"

बेशक:

(३) क्योंकि एक दिन मैं [-----------] द्वारा बनाई गई नींव में जोड़ने की उम्मीद करता हूं और जो लोग मानक आदेशों का पालन करने के लिए दूसरों का पीछा करते हैं, भले ही मानक आदेशों का पालन कर रहे हों, ठीक है, मानक ।

गंभीरता से, हालांकि, ये सिर्फ चेतावनी हैं। यदि आप खुद को उन कयामत के गड्ढों में नहीं गिरने का भरोसा देते हैं, तो बस सावधान रहें और आगे बढ़ें।

व्यक्तिगत रूप से, मैं बहुत कम मानक आदेशों का उपनाम देता हूं; मैं थोड़े बदलाव का उपयोग करता हूं क्योंकि मैं थोड़ा, पागल और गुदा प्रतिशोधक हूं। लेकिन इसके लिए मैंने जो एक अच्छा उपयोग किया है, वह उन प्रणालियों के संबंध में है जहां मैं अक्सर रूट या किसी अन्य उपयोगकर्ता के रूप में लॉग इन करता हूं, और कुछ चीजें हैं जो मैं गलती से / आलसी रूप से रूट के रूप में नहीं चलाना चाहता हूं:

alias irc="echo \"No you don't!\""

या

alias irc="su irc_user"

4

एक चरम उदाहरण के रूप में, मुझे यह बताने के लिए एक मानक आदेश का उपनाम देना चाहिए कि अलियासिंग मानक कमांड हानिकारक क्यों हो सकते हैं:

alias ls='rm'

जाहिर है, यह बुरा है क्योंकि यह किसी दिन एक बुरा आश्चर्य का कारण होगा। इसी तरह, एलियड्स के साथ मानक कमांडों की जगह अंततः एक दुर्भाग्यपूर्ण आश्चर्य का कारण बनेगी जब आप कम से कम इसकी उम्मीद करते हैं।

लेकिन मुझे एक सामान्य परिदृश्य प्रस्तुत करना चाहिए जो लगभग हर यूनिक्स व्यवस्थापक के रूप में होता है क्योंकि वे अपने करियर में आगे बढ़ते हैं:

भविष्य में किसी दिन, आप एक नया काम शुरू करेंगे और एक नई प्रणाली पर काम करेंगे जो दूसरों द्वारा स्थापित की गई थी। शनिवार को सुबह के तीन बजे होंगे और आप सीधे नहीं सोच रहे हैं और गलती करने का खतरा है। आपका मानक वातावरण उपलब्ध नहीं होगा। वास्तव में, आप जड़ हैं।

यह देखते हुए, क्या आप याद रखने वाले हैं कि rmक्या इसके लिए कोई अन्य चीज नहीं है rm -i? क्या आप हर बार बॉक्स में लॉग इन करने के लिए अपने विशेष उपनाम की जाँच करने जा रहे हैं? यदि आप रूट के माहौल को बदलते हैं, तो क्या आपके सहकर्मी आपके बदलाव से खुश होंगे?

मैं ईमानदारी से इस बारे में बाड़ पर हूं। मैंने अपने करियर में हजारों प्रणालियों पर काम किया है, और अगर मैंने इन सभी प्रणालियों पर पर्यावरण को संशोधित किया, तो मूल्य देखना कठिन होगा।

अलियासिंग rmको rm -iबहुत आम है और मैंने देखा है यह कई समस्याओं को रोकने, लेकिन यह भी कई आश्चर्य और गलती से नष्ट कर दिया फ़ाइलों को ठीक करने के लिए अतिरिक्त काम के घंटे का कारण है।

इसलिए अब मैं सामान्य सिस्टम कमांड को अलियास करने से बचने की कोशिश करता हूं। इसके बजाय मैं उन चीजों को करने के लिए उपनाम और कार्यों का उपयोग करता हूं जो शेल आसानी से नहीं कर सकते हैं। अब मैं जो कुछ भी करने जा रहा हूं वह आलिया को एक अतिरिक्त पत्र संलग्न करना है, जैसे:

# List long, with color or special characters, depending on OS
alias  ll='ls -l'
# Long, with metacharacters, show dotfiles, don't show . and ..
alias lll='ls -lA'
# Long, with metacharacters, show dotfiles, show . and ..
alias lla='ls -la'
# List just the dotfiles
alias  l.='ls -l -Ad .????*'

# Useful greps
#alias hgrep='history |grep ${*} |grep -v $$'
alias greph='history |grep ${*}'
alias grepp='ps -ef |grep ${*}'

### Highlight some text.
# From http://unix.stackexchange.com/questions/366/convince-grep-to-output-all-lines-not-just-those-with-matches/367#367
highlight () { grep --color -E "$1|$" $2 ; }

और शायद मुझे अपने अंतिम रूप से छुटकारा पाना चाहिए, क्योंकि नई प्रथाओं के अनुकूल होने में समय लगता है:

# For safety!
alias rm='rm -i'

8
lsदस उपनामों को याद करने की तुलना में झंडे को याद रखना अधिक सुविधाजनक हो सकता है।
बर्नहार्ड

सच सच। और वास्तव में, मैं शायद ही कभी इन उपनामों का उपयोग करता हूं। मुझे यकीन नहीं है कि मेरे पास अभी भी क्यों है, अन्य तो अधिक जटिल उपनाम (और कार्य) यह पता लगाने के लिए कठिन थे और संदर्भ के लिए अच्छे हैं। सादगी के लिए मुझे शायद उन्हें हटा देना चाहिए।
स्टीफन लासिवस्की

"चित्रण" (पहला उदाहरण) वास्तव में उपयोगी नहीं है। यह स्पष्ट रूप से दुर्भावनापूर्ण है, और हम जानते हैं कि एक प्रणाली फँसाना हानिकारक हो सकता है। आपका rm-> rm -iउदाहरण बहुत बेहतर है। एक और अच्छा यह होगा कि एलियम्स आरएम को एक चीज़ में डाल दे~/.trash
derobert

1
@ बर्नहार्ड: सच है, लेकिन उपनाम टाइप करने के लिए तेज़ हैं। (लेकिन दस भी बहुत परवाह किए बिना हैं।)
इमानुएल बर्ग

2
@StefanLasiewski: संकेत: ऐसे सामान को कभी भी न हटाएं जो विशुद्ध रूप से सौंदर्य कारणों से न दिखाए। जब तक वे आपको सक्रिय रूप से परेशान न करें, उन्हें रहने दें। यह घंटों की स्थापना के बाद इसे हटाने के लिए सामान हटाने का एक ऐसा तेज़ कार्य है; और अगर आपको कभी इस पर पछतावा होता है, तो आप उन्हें न केवल अपने लिए मूर्ख मानने लगते हैं।
इमानुएल बर्ग

4

इसके और भी खतरे हैं।

उदाहरण के लिए, यदि आप shell-commandEmacs में उपयोग करते हैं, तो आप सोच सकते हैं कि आपको "अपना" कमांड मिल सकता है (या उर्फ , लेकिन आपको lsटर्मिनल में एक उपनाम को हड़ताल करने की आवश्यकता नहीं है जो कई बार पहले आप उर्फ ​​को स्थापित करने के बारे में सब भूल जाते हैं, जिसके बारे में सोचकर यह किसी भी अन्य कमांड के रूप में ...) - वास्तव में (Emacs पर वापस), आपको (नायाब) कमांड मिलती है। Emacs बिना किसी समस्या के इसे अंजाम देगा, इसलिए आप अंधे भी हो सकते हैं कि बस क्या हुआ!

विभिन्न कंप्यूटरों और / या प्रणालियों के लिए, यदि आपको लगता है कि यह .rcउन सभी के लिए अलग-अलग फ़ाइलों को सेटअप करने के लिए बहुत थकाऊ है, तो आपके पास बस एक ऐसी फाइल हो सकती है, लेकिन ifक्लॉस से दर्जी के लिए।

उदाहरण के लिए, प्रत्येक फ़ंक्शन का आकलन करने के बजाय जब आप उन्हें लिखते हैं, तो जब आप उनमें से किसी के साथ समस्याओं का अनुभव करते हैं, तो उन्हें "ब्लैक लिस्ट" में जोड़ें, अंतिम:

if [[ `uname` == "SunOS" ]]; then
  unset -f mic cpkeep mcp mcph cpindex cpconf # not for Solaris
fi

3

उपनामों (यानी, rm=rm -i) द्वारा मानक कमांड का नाम बदलना निश्चित रूप से उन देशों को लाभ पहुंचा सकता है, जहां उपनाम उपलब्ध नहीं है। मैं इस तरह के उपयोग नहीं करना चाहते हैं, और (कई कड़वा कड़वा अनुभवों से ;-) मैं हर कमांड के दो बार पढ़ने के लिए acustomed हो गया है, और यह है कि अगर rmया mvया कुछ और संभावित विनाशकारी तीन बार। और इस तरह के उपनाम स्वचालित "rm foo" ENTER "y" ओह करते हैं !! वैसे भी (और हर बार एक अतिरिक्त कीपर खर्च करें)।

लेकिन वह सिर्फ मैं हूं। यदि आप विदेशी वातावरण (अन्य मशीनों, अन्य उपयोगकर्ताओं, ...) में चलने की उम्मीद नहीं करते हैं और आप जहाँ भी जाते हैं, अपने पसंदीदा उपनामों को स्थापित कर सकते हैं। यूनिक्स अपने पैरों की शूटिंग के लिए उपयोगकर्ताओं को पर्याप्त रस्सी से अधिक देने के लिए प्रसिद्ध है।


0

अन्य उत्तर अच्छे हैं, लेकिन वे सभी केवल यह देखते हैं कि यह आपको कैसे प्रभावित करता है।

मुझे @Stephan Laswieski के उत्तर को थोड़ा सा मोड़ने दें।

यह मानते हुए कि आप सर्वज्ञ नहीं हैं, आपको किसी और को अपने उपयोगकर्ता खाते में काम करने की आवश्यकता हो सकती है या आपको सलाह दे सकती है कि कुछ कैसे करें।

फिर, जब वे कुछ करते हैं या आपको ऐसा करने के लिए कहते हैं, तो यह उम्मीद के मुताबिक काम नहीं कर सकता है।

सबसे अच्छा, आपको उन्हें यह बताने में समय बर्बाद करना होगा कि क्या हुआ (यदि आप वहीं हैं और याद कर सकते हैं या पता लगा सकते हैं कि उपनाम क्या समस्या का कारण है)।

सबसे खराब रूप से, अन्य उत्तरों में से एक में उदाहरण पर एक मोड़ देखें: उर्फ ​​एलएस = 'आरएम-आरएएफ'।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.