පරිසර විචල්‍යයන් සැකසීමට BASH ස්ක්‍රිප්ට් ක්‍රියා නොකරයි


160

අවශ්‍ය විටදී පරිසර විචල්‍යයන් කිහිපයක් සැකසීමට මම පහත පිටපත ලියා ඇත.

#!/bin/sh
export BASE=/home/develop/trees
echo $BASE
export PATH=$PATH:$BASE
echo $PATH

විධානයට පහළින් සහ මගේ පර්යන්තයේ මට දැකිය හැකි ප්‍රති results ල: ස්ක්‍රිප්ට් ක්‍රියාත්මක වන නමුත් විචල්‍යයන් අවසානයේ සකසා නොමැත.

~$: ./script.sh
/home/develop/trees
/bin:......:/home/develop/trees
~$: echo $BASE

~$: 

මොකක් ද වැරැද්ද? කලින්ම ස්තූතියි. මිර්කෝ


ෂෙල් වෙඩි ධූරාවලි වශයෙන් විවෘත වේ. ඔබට දෙමව්පියන්ගේ කවචයේ . ./yourscript.sh
වර්ස්

Answers:


226

exportexportවිධානය ක්‍රියාත්මක වූ කවචයේ ළමා ක්‍රියාවලීන් සඳහා විචල්‍ය පැවරුම අපනයනය කරයි . ඔබගේ විධාන රේඛා පරිසරය ස්ක්‍රිප්ටයේ කවචයේ මවුපියන් වන බැවින් විචල්‍ය පැවරුම නොපෙනේ.

වත්මන් ෂෙල් පරිසරය තුළ ස්ක්‍රිප්ට් විධාන ක්‍රියාත්මක කිරීමට සහ ඔබට අවශ්‍ය දේ සාක්ෂාත් කර ගැනීමට ඔබට .(හෝ source) bash විධානය භාවිතා කළ හැකිය , උදා.

source ./script.sh
echo "$BASE"

නිෂ්පාදනය කරනු ඇත

/home/develop/trees

sourceබොහෝ විට ස්ක්‍රිප්ට් වල දක්නට ලැබෙන මෙම විධානය .පොසික්ස් ප්‍රමිතියේ කොටසක් වන බාෂ් .සම පදයකි (එබැවින් ඉරකින් ලබා ගත හැකිය, උදාහරණයක් ලෙස, නමුත් sourceඑසේ නොවේ).

. ./script.sh     # identical to "source ./script.sh"

( . script.shසහ source script.shමුලින්ම එය සොයා බලනු script.shඇත PATH, එබැවින් මාර්ගය නියම කිරීම ආරක්ෂිත වේ script.sh.)


30
ඔබට exportවිචල්යයන් උප-ෂෙල් වෙත යැවීමට අවශ්‍ය නැත , උපසෙල් යනු ඔබේ වර්තමාන කවචයේ පිටපතක් වන අතර එය විචල්යයන් සහ කාර්යයන් යනාදිය වේ. දෙවනුව, .මූලාශ්‍රය සඳහා වන POSIX විධානයයි. Bash ඒ sourceසඳහා වඩාත් කියවිය හැකි සමාන පදයක් ලෙස එකතු කරයි , නමුත් ඔබට එය sh වලින් ලබා ගත හැකිය. අවසාන වශයෙන් . ./scriptවෙනුවට . scriptඔබ විස්මයන් වළක්වා කිරීමට අවශ්ය නම්. mywiki.wooledge.org/BashFAQ/060
geirha

ඔබ ස්ක්‍රිප්ටයක් ප්‍රභව කර පයිප්පයක් භාවිතා කරන්නේ නම්, එම පරිසරය දෙමාපියන්ට ලබා ගත නොහැකි බව සලකන්න. උදා: 'source setit.sh' හරි. 'source setit.sh | tee setit.log' අවුලක් නැත. පුදුමයි. බුද්ධිමත් නොවේ.
gaoithe

17

ඔබ ස්ක්‍රිප්ට් එකක් ධාවනය කරන විට, එය උප කුලකයකින් ක්‍රියාත්මක වේ. විචල්‍යයන් වලංගු වන්නේ එම උපලේඛනයේ සන්දර්භය තුළ පමණි. ඒවා ඔබගේ .bashrcහෝ .profileසකසා විචල්‍යයන් සහ උප-ෂෙල් මත කියවන්න . මෙම exportප්‍රකාශය ඔබේ උදාහරණයේ දී මෙන් ධූරාවලිය (වත්මන් කවචය සහ එහි ඇති සියලුම උපසිරැසි) ක්‍රියාත්මක නොවේ.

විකල්පයක් ලෙස (ඔබේ වර්තමාන කවචයේ පරිසරය කෙරෙහි ස්ක්‍රිප්ට් බලපානවා නම්) එය ක්‍රියාත්මක කරන්න:

. ./script.sh

එමඟින් එය ඔබගේ වත්මන් කවචයේ ක්‍රියාත්මක වීමට හේතු වන නමුත් විචල්‍යයන් ධූරාවලිය දක්වා ඉහළට නොයනු ඇත.


5

මට බොහෝ විට අවශ්‍ය වන්නේ කරදරයකින් තොරව පරිසර විචල්‍යයක් සැකසීමට ය.

මෙම පහසුව ක්‍රියාත්මක කිරීම සඳහා මම මගේ .bashrc වෙත එකතු කරන්නේ මෙන්න.

defect() {
    if [ $1 ] && [ -z $2 ]
    then
        eval 'export DEFECT=$1'
        return 0
    else
        echo 'Usage: defect {number}'
        return 1
    fi
}

-1

ඔබට මේ වගේ දෙයක් උත්සාහ කළ හැකිය

CURRENT_DIR=`pwd`
echo "SOME_PATH is pointing to ${CURRENT_DIR}"
#Export SOME_PATH for current working directory
export SOME_PATH=${CURRENT_DIR}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.