সাব-শেল / চাইল্ড প্রসেসে এলিয়াস


16

আমি প্রতিটি লগইন শেলের জন্য /etc/profile.d/alias.sh এ উপকরণ স্থাপন করি। তবে আমি স্ক্রিপ্ট.শ চালিয়ে দিলে আমি সেই উপনামটি ব্যবহার করতে পারি না। সাবসেল বা শিশু প্রসেসের জন্য আমি কীভাবে ওরফে সেট করতে পারি?

/etc/profile.d/alias.sh

alias rmvr='rm -rv';
alias cprv='cp -rv';
alias mvrv='mv -rv';

উত্তর:


24

উপাধি উত্তরাধিকারসূত্রে হয় না। এ কারণেই এগুলি traditionতিহ্যগতভাবে সেট করা আছে bashrcএবং নেই profile। পরিবর্তে script.shআপনার .bashrcবা সিস্টেম-ওয়াইড এক থেকে উত্স করুন ।


অন্তর্নিহিত দ্বারা, আপনি বোঝাতে চাইছেন উদাহরণস্বরূপ রফতানি চলকগুলি উত্তরাধিকার সূত্রে প্রাপ্ত এবং বাকিটি নেই?
লিসাক

1
আমি মনে করি না যে .Bashrc সাহায্য করে ... আপনি যদি সেই উপনামটি ব্যবহার করেন তবে একটি সাবশেলে, এটি এটি জানে না
লিসাক

বাশার্ক সমস্ত ইন্টারেক্টিভ নন-লগইন শেলগুলির জন্য পঠিত হয় যার কারণে এটি কাজ করা উচিত যেহেতু আপনি শুরু করা বেশিরভাগ শেলগুলি ইন্টারেক্টিভ নন-লগইন শেল এবং ()
এলিয়াসগুলি সাবসিলে

আমি ওরফে নাম () অনুরোধ সম্পর্কে জানতাম না, আপনাকে ধন্যবাদ

কেবল পরিষ্কার করার জন্য, আমি যা বোঝাতে চাইছিলাম তা হ'ল বাশ alias foo='echo foobar', প্রবেশ, (foo)আউটপুটগুলিতে foobar
jw013

11

কারণ /etc/profile.d/ কেবল ইন্টারেক্টিভ লগইন শেল দ্বারা ব্যবহৃত হয়। তবে /etc/bash.bashrcইন্টারেক্টিভ নন-লগইন শেল দ্বারা ব্যবহৃত হয়।

যেহেতু আমি সাধারণত সিস্টেমের জন্য কিছু বৈশ্বিক নাম নির্ধারণ করি, তাই আমি তৈরি করতে শুরু করেছি /etc/bashrc.dযেখানে আমি কিছু বৈশ্বিক নাম দিয়ে একটি ফাইল ফেলে দিতে পারি:

    HAVE_BASHRC_D=`cat /etc/bash.bashrc | grep -F '/etc/bashrc.d' | wc -l`

    if [ ! -d /etc/bashrc.d ]; then
            mkdir -p /etc/bashrc.d
    fi
    if [ "$HAVE_BASHRC_D" == "0" ]; then
        echo "Setting up bash aliases"
            (cat <<-'EOF'
                                    if [ -d /etc/bashrc.d ]; then
                                      for i in /etc/bashrc.d/*.sh; do
                                        if [ -r $i ]; then
                                          . $i
                                        fi
                                      done
                                      unset i
                                    fi
                            EOF
            ) >> /etc/bash.bashrc

    fi

8

আপনি যদি এগুলি সাব-শেলের উত্তরাধিকার সূত্রে পেতে চান তবে পরিবর্তে ফাংশন ব্যবহার করুন। সেগুলি পরিবেশে রফতানি করা যায় ( export -f), এবং সাব-শেলগুলির পরে সেই ফাংশনগুলি সংজ্ঞায়িত করা হবে।

সুতরাং, আপনার একটি উদাহরণের জন্য:

rmvr() { rm -rv "$@"; }
export -f rmvr

আপনার যদি সেগুলির একটি গুচ্ছ থাকে তবে প্রথমে রফতানির জন্য সেট করুন:

set -a # export the following funcs
rmvr() { rm -rv "$@"; }
cpvr() { cp -rv "$@"; }
mvrv() { mv -rv "$@"; }
set +a # stop exporting

0

অনুরূপ প্রশ্ন, আমি বাশ "কমান্ড মোড" চালাতে চেয়েছিলাম এবং উপকরণগুলি পাওয়াতে চাই:

bash -i 'alias'কিছুই করে না তবে আমি -i পতাকাটি আবিষ্কার করেছি যা ইন্টারেক্টিভ সেটআপগুলি চালায়, তাই এটি: bash -ci 'alias'কাজ করে।

আপনার প্রশ্নের জন্য, উপস্থিত রয়েছে আপনি ফাইলটিকে "সোর্সিং" করে এড়িয়ে যেতে পারেন, প্রাক্তন:

 bash -ci '. script.sh'

তারপরে এলিয়াস কাজ করে। FWIW ...

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