/Root/.bashrc এ সেটিংস ব্যবহার করার জন্য আমি sudo কমান্ডগুলি কীভাবে পেতে পারি


9

আমি .bashrcবেশ কয়েকটি ওরফে নির্দিষ্ট করে llএবং কাস্টমাইজ করেছিexport LS_OPTIONS='--color=auto'

দুর্ভাগ্যক্রমে এটির সাথে ব্যবহার করার সময় এটি কাজ করে না sudo, তাই আমিও সংশোধন করেছি /root/.bashrc, তবে মনে হয় এটি কোনও পার্থক্য করে না।

sudo envশো HOME=/rootএবংSHELL=/bin/bash

sudoসেটিংসটি ব্যবহার করার জন্য আমি কীভাবে আদেশ পেতে পারি /root/.bashrc?

আমি বুঝতে পারি যে এটি কেবল তখনই ঘটে যখন bashইন্টারেক্টিভভাবে কার্যকর করা হয়, সুতরাং কীভাবে কাস্টমাইজ করা যায় সে সম্পর্কে আমি অন্য কোনও পরামর্শের জন্য উন্মুক্ত।


@ ড্যানিয়েল-জেলিং - আমি সবসময়ই অনুভব করেছি যে এই কিউটি একটি এক্সওয়াই সমস্যা - meta.stackex بدل . com / qutions / 66377 / কি-is - the - xy - problem । শিরোনামটি বোঝায় যে তারা বাইরে থেকে কিছু চায় /root/.bashrcতবে সত্যিকার অর্থে Q এর পরে কী হয় এই ফাইলটির এলিয়াস - এটি প্রতি সম্ভব নয় - unix.stackexchange.com/questions/1496/…
slm

@slm আমি পরে bashrc একটি পদ্ধতি যোগ করা হয় কি - যেমন আমি আমার ব্যক্তিগত .bashrc ফাইল সেইসাথে "অক্ষম" রুট জন্য .bashrc ফাইলের মধ্যে সম্পন্ন করেছি -rজন্য বিকল্প crontab: crontab () { [[ $@ =~ -[iel]*r ]] && echo '"r" not allowed' || command crontab "$@" ;}। এটি ব্যবহারকারী হিসাবে লগ ইন করার সময় এটি কাজ করে, তবে আমি যখন sudo crontab -rএটি কার্যকর করি তখনও এটি কার্যকর হয় ।
26:38

@ ড্যানিয়েলজিলিং - দেখুন আমার উত্তরটি আপনার দৃশ্যের জন্য কাজ করে কিনা।
slm

উত্তর:


6

sudoএকটি এক্সিকিউটেবল চালায়, শেল কমান্ড নয়। সুতরাং এটি এলিয়াস সম্পর্কে জানে না। আপনি যদি চালনা করেন sudo ls, তবে এটি আপনার মতো sudo /bin/lsকোনও lsএলিফ ব্যবহার করে না ।

sudo lsআপনার নিজের মধ্যে নিম্নলিখিতটি রেখে উপন্যাসটি প্রসারিত করতে পারেন .bashrc:

alias sudo='sudo '

পেছনের স্থানটি নোট করুন - যা শেলটিকে তার পরে আসা শব্দের সাথে ওরফে বিস্তৃতি অবিরত রাখতে বলে sudo। সাবধান থাকুন যে সুডোর পরের মতো উপকরণগুলি প্রসারিত করা সর্বদা একটি ভাল ধারণা নাও হতে পারে, এটি নির্ভর করে আপনার কী ধরণের উপাত্ত রয়েছে।

তবুও sudo পরিবেশ থেকে বেশিরভাগ পরিবর্তনশীল সরিয়ে দেয়। এটি কোনও উপনামের মতো প্রভাব ফেলবে না alias ls='ls $LS_OPTIONS', কারণ কমান্ডটি প্রসারিত করার সময় এটি শেলের দ্বারা ব্যবহৃত শেল ভেরিয়েবল (এবং এটিকে রফতানি .bashrcকোনও উদ্দেশ্য করে না)। তবে এটি কমান্ড দ্বারা ব্যবহৃত ভেরিয়েবলগুলিকে প্রভাবিত করবে, যেমন LS_COLORS। আপনি sudo এর কনফিগারেশন সম্পাদনা করে নির্দিষ্ট পরিবেশের পরিবর্তনগুলি রাখতে কনফিগার করতে পারেন: visudoলাইনটি চালান এবং যুক্ত করুন

Defaults env_keep += "LS_COLORS"

এই সেটিংসের sudo llসাহায্যে আপনি যে রঙগুলি ব্যবহার করেছেন তা দিবে।

বিকল্পভাবে, আপনি এর সাথে একটি রুট শেল চালাতে পারেন sudo -s। এই শেলটি এর কনফিগারেশন ফাইলটি ( ~/.bashrcব্যাশের জন্য) লোড করবে । কীভাবে sudo কনফিগার করা হয়েছে তার উপর নির্ভর করে এটি HOMEআপনার হোম ডিরেক্টরিতে সেট করে রাখতে পারে বা এটিকে পরিবর্তন করতে পারে /root। আপনি হোম ডিরেক্টরিটি মূলের সাথে সেট করতে বাধ্য করতে পারেন sudo -Hs; বিপরীতে, মূল হোম ডিরেক্টরি রাখতে, চালান sudo env HOME="$HOME" bash


3

যারা উত্তর দিয়েছেন তাদের ধন্যবাদ, যারা আমাকে man sudoআরও মনোযোগ সহকারে পড়তে বলেছিলেন ।

sudo -s যদি কোনও কমান্ড নির্দিষ্ট না করা থাকে তবে একটি ইন্টারেক্টিভ শেল কার্যকর করা হয়।

এই ইন্টারেক্টিভ শেলটিতে /root/.bashrcআমার কাস্টমাইজেশন অন্তর্ভুক্ত রয়েছে।

এটি কমান্ড পৃথকভাবে প্রবেশ করা প্রয়োজন, কিন্তু এটি ঠিক আছে।


2

পটভূমি

আমি সবসময় অনুভব করেছি এই প্রশ্নটি একটি এক্সওয়াই সমস্যা । শিরোনামটি বোঝায় যে তারা কিছু চাইছে না /root/.bashrcতবে আসলে এই প্রশ্নটি যা এই ফাইলটির এলিয়াস - এটি ব্যাপকভাবে বিশ্বাস করা হয় যে এটির জন্য এটি সম্ভব হবে না - কেন আমার বাশ স্ক্রিপ্ট এলিয়াসগুলি স্বীকৃতি দেয় না?

এটি মূলত ডিজাইনের মাধ্যমে যা আপনার এলিয়াসগুলি sudoঅন্য জায়গায় বাছাই করতে পারে না কারণ তারা পোর্টেবল নয় এবং তাদের সম্পর্কেও আমার এই মতামত।

ব্যবহারকারীর পরিবেশের যে কোনও কিছু স্ক্রিপ্ট এবং কোনও প্রদত্ত বাক্সে চলতে পারে এমন কোনও সফ্টওয়্যার দ্বারা ধরে নেওয়া উচিত নয়। তবে আমি বুঝতে পারি যে এমন পরিস্থিতিতে আছে যেখানে প্রদত্ত ব্যবহারকারীর অ্যাকাউন্টে কিছু এলিয়াস থাকতে পারে $HOME/.bashrcযা অন্যরা ইন্টারেক্টিভ পরিস্থিতিতে দৃ .়ভাবে লাভ করতে চায়।

সে লক্ষ্যে আপনি কেবল ব্যাশ ইন্টারপ্রেটারকে বলতে পারেন যে এটি ব্যবহার করার সময় আপনি যে সাধারণ শেল আচরণের বাইরে চলে যাচ্ছেন তার বাইরে লগইন প্রক্রিয়া চলাকালীন যে কোনও উপকরণগুলি প্রসারিত করতে পারেন sudo

উদাহরণ

সেটআপ

জিনিসগুলি সেট আপ করার জন্য আমি আমার মূল ব্যবহারকারী /root/.bashrcএবং /root/.bash_profileফাইলগুলিতে নিম্নলিখিত বর্ণনাম, পরিবেশের ভেরিয়েবল এবং ফাংশন যুক্ত করেছি ।

$ grep smurf ~/.bashrc
alias brc_smurf='echo "ran alias from /root/.bashrc"'
export brc_smurf_env='var from /root/.bashrc'
bpf_smurf_func() { echo 'ran func from /root/.bash_profile'; }

$ grep smurf ~/.bash_profile
alias bpf_smurf='echo "ran alias from /root/.bash_profile"'
export bpf_smurf_env='var from /root/.bash_profile'
brc_smurf_func() { echo 'ran func from /root/.bashrc'; }

এই কাজগুলির কোনও কিছুই না করে (কোনও আশ্চর্য হওয়ার কিছু নেই):

$ sudo brc_smurf
sudo: brc_smurf: command not found

$ sudo bpf_smurf
sudo: bpf_smurf: command not found

আমরা দেখতে পেলাম যে aliasকমান্ডটি চালিত হওয়ার সময় কোনও উপস্বকার প্রদর্শন করে না sudo:

$ sudo alias
$

এই আচরণটি আপনার ইঙ্গিত যা আপনার অন্যান্য উপাত্তগুলি অ্যাক্সেসযোগ্য হবে বলে আশা করা উচিত নয়। তবে আমরা চালিয়ে যাচ্ছি ...

পদক্ষেপ # 1 - এলিয়াস দৃশ্যমান

আমরা যদি চালাই তবে bash -ciআমরা বাশকে কমপক্ষে আমাদের পড়তে প্ররোচিত করতে পারি $HOME/.bashrc:

$ sudo bash -ci 'alias' | grep smurf
alias brc_smurf='echo "ran alias from /root/.bashrc"'

শীতল, তাই সম্ভবত আমরা এটি চালাতে পারি?

$ sudo bash -ci 'alias; brc_smurf'
bash: alias; brc_smurf: No such file or directory

ধাপ ২ - shopt -s expand_aliases

নাঃ। আবার এটি ডিজাইনের মাধ্যমে, আমরা এমন কিছু করছি যা আমরা মনে করি না যে আমরা এটি করে যাচ্ছি, সুতরাং আমাদের অক্ষম করতে হবে এমন অনেকগুলি "সেফটি" রয়েছে। অন্য "সুরক্ষা" হ'ল বাশ।

$ sudo bash -ci 'shopt -s expand_aliases; alias; brc_smurf'
alias brc_smurf='echo "ran alias from /root/.bashrc"'
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
ran alias from /root/.bashrc

এখানে আমরা আমাদের বার্তাটি দেখতে পাচ্ছি /root/.bashrc, আমরা রুট ব্যবহারকারীর নামটি সফলভাবে সম্পাদন করেছি brc_smurf

পদক্ষেপ # 3 - এনভি ভার্সেস সম্পর্কে কি?

আপনি যদি উপরে বর্ণিত পদ্ধতিটি ব্যবহার করেন তবে এখন কাজ করা উচিত।

$ sudo bash -ci 'shopt -s expand_aliases; brc_smurf; echo $brc_smurf_env'
ran alias from /root/.bashrc
var from /root/.bashrc

পদক্ষেপ # 4 - ফাংশন সম্পর্কে কি?

এগুলি প্রত্যাশার মতোও কাজ করে:

$ sudo bash -ci 'shopt -s expand_aliases; brc_smurf; echo $brc_smurf_env;brc_smurf_func'
ran alias from /root/.bashrc
var from /root/.bashrc
ran func from /root/.bashrc

TLDR;

আপনি পরিবেশের ভেরিয়েবল + এলিয়াসগুলি থেকে অ্যাক্সেস পেতে এটি করতে পারেন /root/.bashrc:

$ sudo bash -ci 'shopt -s expand_aliases; <cmds>'

অ্যাভয়েস নিন

এই পদ্ধতিতে বিষয়বস্তু সক্ষম করে /root/.bashrc, এতে লিখিত সামগ্রীগুলি নেওয়া হয় না /root/.bash_profile

তথ্যসূত্র


হ্যাঁ, যদিও তাদের মধ্যে কিছু ছোটখাটো পার্থক্য রয়েছে, আসুন এখানে বিশদভাবে না যাই ;-)। যাইহোক, প্রশ্নটির মন্তব্যে আমি যে পরিস্থিতিটি বলেছিলাম তাতে আপনি কি আমাকে সহায়তা করতে পারেন: .bashrcসুডোর সাথে ফাংশন ব্যবহার করে ; বিশেষত -rবিকল্পটি অপসারণ করছেন crontab?
26:58

ঠিক আছে, তবে এর অর্থ কি আমাকে চালাতে হবে: sudo bash -ci 'alias; shopt -s expand_aliases; echo $brc_smurf_env'সাধারণের পরিবর্তে sudo echo $brc_smurf_env?
ড্যানিয়েল জেলিং

আপনি তাদের সরানোর জন্য এটি সরাতে পারেন alias, আপনাকে করতে হবেsudo bash -ci 'shopt -s expand_aliases; <cmds>'
slm

এটি মূলের জন্য আমার ক্রোন্টাব সম্পাদনা করার জন্য টাইপিংয়ের অনেকগুলি বিষয় হবে। আমি এর জন্য একটি নাম রাখি :
ড্যানিয়েল জেলিং

@ ড্যানিয়েলজিলিং - হ্যাঁ, শেল অন্ত্রের সমস্ত মজাতে আপনাকে স্বাগতম।
slm

0

সুনির্দিষ্টভাবে / etc / sudoers ফাইলে কিছু সেটআপ রয়েছে বা sudo কমান্ডগুলি চালিত হওয়ার জন্য একটি পরিবেশ স্থাপন করা হয় (উদাহরণস্বরূপ, PATH এর কেবল নির্ভরযোগ্য অবস্থান রয়েছে কিনা তা নিশ্চিত করে) তবে আপনি কী আশা করছেন তার উপর নির্ভর করে যদি আপনি পরিবেশ স্থাপনের জন্য শেলটিতে প্রকৃত কমান্ডগুলি চালিত করে তবে আপনি যা করতে পারেন তা করতে পারবেন না। বিশেষত সুডোং আপনাকে রুট লগইন শেল দেয় না যাতে এটি আপনার জন্য একটি নিয়মিত প্রোফাইল সেট আপ করে না।


0

বলি যে আমরা /root/.bashrc এটিকে সম্পাদনা করি:

$ sudo su -
Password: ******
# cat ~/.bashrc

echo "root bashrc file was read"
PATH=~/bin:$PATH
echo "$PATH"
export USERVAR=set
echo "$USERVAR"

umask 022
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'

ফাইলটি পড়ার জন্য লগ আউট এবং লগ ইন করতে দেয়:

# exit
$ sudo su -
root bashrc file was read
/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
set
root@here:~# alias l
alias l='ls $LS_OPTIONS -lA'
root@here:~# 

আপনি দেখতে পাচ্ছেন, ফাইলটি পড়েছিল, PATH পরিবর্তন করা হয়েছিল এবং উপকরণগুলি সেট করা হয়েছে। আপনার অনুরোধ অনুসারে সমস্ত কার্যকরী।

তবে, সুডো এখনও আপনি যেমন আশা করছেন তেমন কাজ করবে না।

root@here:~# exit
$ sudo env | grep USERVAR              # no output 
$ sudo env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

PATH পরিবর্তন হয়নি। Sudoers এ পথ পরিবর্তন করার বিভিন্ন উপায় থাকতে পারে তবে আমি তা না করার জন্য দৃ strongly়ভাবে আপনাকে পরামর্শ দিচ্ছি। এবং যাইহোক, এলিয়াস, ফাংশন এবং অন্যান্য কিছু পরিবর্তন কেবলমাত্র PATH পরিবর্তন করে প্রয়োগ করা হবে না। একটি ফাইল সোর্স করা প্রয়োজন। প্রতিটি স্ক্রিপ্ট বা কমান্ডের জন্য এটি করা কম্পিউটারকে কোনও আসল সুবিধা ছাড়াই আরও কাজ সম্পাদন করতে বলবে। স্ক্রিপ্টটি উপকরণ ব্যবহার করে না (স্ক্রিপ্টগুলির অভ্যন্তরে এগুলির জন্য ব্যবহারিক ব্যবহার নেই)।

সুতরাং, কেবল লগ ইন করুন, .bashrcফাইলটি স্বয়ংক্রিয়ভাবে লোড হবে এবং কাজ করবে।

আপনি এটি হিসাবে বাশ শুরু করতে পারেন:

$ sudo bash
root bashrc file was read
/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
set
root@mail:/home/isaac/me/temp/clocks-master#

তবে আপনি উপরে যেমন দেখেন যে পিডব্লিউডি (ওয়ার্কিং ডিরেক্টরি) পরিবর্তন হয়নি এবং আপনি যদি আরও কিছু পরীক্ষা করেন তবে কিছু অন্যান্য সেটিংসও পরিবর্তন হয়নি। এজন্য সঠিক কমান্ডটি ব্যবহার করতে হবে:

$ sudo su -

যদি সেই কমান্ডটি টাইপ করতে খুব দীর্ঘ হয় তবে ব্যবহারকারীর (রুট নয়) একটি উপনাম বা একটি ফাংশন তৈরি করুন যেখানে সেই আদেশটি ব্যবহৃত হবে, এরকম কিছু:

$ alias mysu='sudo su -'
$ mysu
# 

0

টিএল; ডিআর: আপনি সংজ্ঞায়িত ফাংশনটিsudo -i চালাতে ব্যবহার করতে পারেন (তবে একটি নাম নেই) এবং সেই ফাইল থেকে রফতানি হওয়া ভেরিয়েবলের অ্যাক্সেসও রাখতে পারেন:/root/.bashrc

sudo -i  কমান্ড আর্গুমেন্ট

উপনামগুলি সেখানে কাজ করে না, তবে আপনি যদি এগুলিকে উপলব্ধ করতে চান তবে আপনি সহজেই সেগুলিকে ফাংশনে রূপান্তর করতে পারেন sudo -i

সম্পূর্ণ বিশ্লেষণ এবং আরও বিশদ জন্য পড়ুন।


এখানে কয়েকটি সমস্যা রয়েছে, কিছু সুডো কীভাবে কাজ করে এবং কিছু বাশ নিজে কীভাবে কাজ করে ...

ডিফল্টরূপে, sudoকেবল কমান্ড সন্ধান করবে এবং শেলকে বাইপাস করবে, সুতরাং কেবলমাত্র চলমান sudo llকাজ কেবল তখনই কাজ করবে যদি কোনও llডিরেক্টরিতে কোনও এক্সিকিউটেবল থাকে $PATH। সুতরাং, এলিয়াসগুলি (বা ফাংশন) ব্যবহার করার জন্য আপনাকে অবশ্যই নিশ্চিত করতে হবে যে প্রক্রিয়াটির অংশ হিসাবে শেলটি ব্যবহৃত হয়েছে।

ওয়ান ওয়ে ভালো কিছু চালানো হবে sudo shবা sudo bash, যদিও আধুনিক sudo(আমি উবুন্টু 1.8.19p1 উপর এই পরীক্ষার করছি) বিকল্প রয়েছে -sএবং -iযে উদ্দেশ্যে।

সুতরাং একটি চেষ্টা এর মতো কিছু হবে sudo -s ll(যা সমান sudo bash -c 'll', আপনার $SHELLবাশ হিসাবে ধরে নেওয়া , যা rcfileআপনি উল্লিখিত ভিত্তিতে কেস বলে মনে হচ্ছে )) তবে এটি কোনওভাবেই কাজ করে না, যেহেতু এটি শাঁসটি একটি অ-ইন্টারেক্টিভ থেকে শুরু করে, অ-লগইন মোড, যা এর কোনও প্রারম্ভিক ফাইল পড়বে না। এটি মূলত একই রকম যদি আপনি কোনও শেল স্ক্রিপ্ট লেখেন এবং #!/bin/bashএটি চালানোর জন্য ব্যবহার করেন। আপনার যে এলিয়াসগুলি (এবং ফাংশন) রয়েছে ~/.bashrcসেগুলি স্ক্রিপ্ট থেকে অ্যাক্সেসযোগ্য হবে না ...

এরপরে -iঅপশনটি রয়েছে যা লগইন শেল তৈরি করে। এটিই বেশী প্রতিশ্রুতি আছে, যেহেতু এটি হবে আপনার আরম্ভের ফাইলগুলি পড়তে! এবং এখনও, sudo -i ll(সমতুল্য sudo bash -l -c 'll') এখনও কাজ করবে না। সুতরাং এটি কীভাবে সম্ভব, প্রদত্ত এটির নামটির সংজ্ঞাটি পড়ে কিll ?

ঠিক আছে, এখানে পরবর্তী ব্যাখ্যাটি হ'ল, ডিফল্টরূপে, শ্যাশটি ইন্টারেক্টিভ ছাড়া কেবল ব্যাস আলিয়াসগুলি প্রসারিত করবে না ... sudo -i(বা bash -l) দ্বারা শুরু করা এই শেলটি একটি লগইন শেল, তবে এখনও ইন্টারেক্টিভ নয়।

সুতরাং পরবর্তী পদক্ষেপটি একটি ইন্টারেক্টিভ শেল পাওয়া, যা তারপরে কাজ করে :

sudo bash -i -c 'll'

( লগইন এবং ইন্টারেক্টিভ উভয়ই থাকা ভাল, অবশ্যই কার্যকর bash -l -i -c ...হবে))

আরেকটি বিকল্প হ'ল লগইন শেল (অ-ইন্টারেক্টিভ) ব্যবহার করা চালিয়ে যাওয়া কিন্তু এটিকে এলিয়াসগুলি প্রসারিত করার জন্য স্পষ্টভাবে জিজ্ঞাসা করুন, সুতরাং এটি কাজ করবে:

sudo bash -l -O expand_aliases -c 'll'

(বাশ ইন্টারেক্টিভ ছিল এমন ক্ষেত্রে লগইন শেলের দরকার পড়েনি, যেহেতু প্রারম্ভিককরণ ফাইলগুলি পড়ার জন্য এটি যথেষ্ট, তবে এটি -lতাদের পড়তে হবে))

এগুলি মোটামুটি দীর্ঘ কমান্ড লাইনগুলি ... এবং তাদের এছাড়াও আপনার পুরো শেল কমান্ডটি উদ্ধৃত করা দরকার, সুতরাং আপনি যদি কোনও যুক্তি দিয়ে কোনও উপাধি কল করেন, আপনাকে সমস্ত কিছু স্ট্রিংয়ে রূপান্তর করতে হবে ... সুতরাং এটি একধরণের ব্যবহার করতে আনাড়ি ...

নোট করুন যে আগে আমি এলিয়াস এবং ফাংশন সম্পর্কে কথা বলছিলাম ... এটি উদ্দেশ্য ছিল, যেহেতু এখানে ফাংশনগুলি আসলে অনেক বেশি সুবিধাজনক। শেলের উপর ফাংশন সম্পাদন করার জন্য আপনার ততক্ষণ কোনও বিশেষ (যেমন একটি ইন্টারেক্টিভ শেল থাকা বা একটি নির্দিষ্ট বিকল্প সেট করা) দরকার নেই যতক্ষণ আপনি তাদের সংজ্ঞাটি স্রোস করছেন।

সুতরাং আপনি যদি কোনও উপামের পরিবর্তে llকোনও ফাংশন হিসাবে সংজ্ঞায়িত হন তবে আপনি এটি সুডোর -iশর্টকাটের সাহায্যে সরাসরি ব্যবহার করতে সক্ষম হবেন :

sudo -i ll

এবং যদি আপনার কাছে আর্গুমেন্টের সাথে দীর্ঘতর কমান্ড-লাইন থাকে তবে আপনি এগুলি সরাসরি এখানেও দিতে পারেন:

sudo -i ll -C -R /etc

(তুলনা করুন sudo bash -i -c 'll -C -R /etc'।)

ক্রিয়াকলাপগুলি আরও অনেক নমনীয় এবং বজায় রাখা সাধারণত সহজ ... সাধারণত একটি উপনামকে একটি ফাংশনে রূপান্তর করা সহজ, একমাত্র সতর্কতা হ'ল সর্বদা ব্যবহার করা "$@"যেখানে আপনি অতিরিক্ত যুক্তি গ্রহণের প্রত্যাশা করতেন (সাধারণত শেষের দিকে ওরফে।)

উদাহরণস্বরূপ, এই উপনাম:

alias ll='ls $LS_OPTIONS -l'

এই ফাংশনে পরিণত হতে পারে:

ll () {
    ls $LS_OPTIONS -l "$@"
}

তারা, বেশিরভাগ উদ্দেশ্যে, সমতুল্য। এবং যেমনটি পূর্বে উল্লেখ করা হয়েছে, ফাংশনটি সরাসরি থেকে অ্যাক্সেসযোগ্য হওয়া উচিত sudo -i, যাতে এটি একটি যুক্ত বোনাস।

আমি আশা করি আপনি এই উত্তর এবং ব্যাখ্যা সহায়ক বলে মনে করি!


ডিভি - আমার মনে হয় না যে এখানে ইতিমধ্যে যা আছে তার চেয়ে পরিস্থিতি উন্নতি করছে।
slm

1
@ এসএলএম আমার মনে হয় যে আমার উত্তরটি কিছু যুক্ত করছে, যেহেতু পূর্ববর্তী কোনও উত্তর ফর্মটি উল্লেখ করে নি যা থেকে ফাংশনsudo -i command arguments চালাতে সক্ষম হবে এবং রফতানযোগ্য ভেরিয়েবলগুলি উপলব্ধ নেই। তবে আমি দেখতে পাচ্ছি যে সম্ভবত আমার উত্তরটি খুব দীর্ঘ ছিল এবং সেই তথ্যটি সেখানে কিছুটা কবর দেওয়া হয়েছিল ... সুতরাং আমি সংক্ষিপ্তসার জন্য একটি টিএল যুক্ত করেছি; ডিআরটি সংক্ষেপে (তদন্তের প্রযুক্তিগত বিশদ বিবরণ রাখার পরেও।) দয়া করে অন্য একবার দেখুন। /root/.bashrc
ফিলাব্রেন্ডেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.