මෙම dirname
විධානය හුදෙක් කපා ගොනු නාමය සඳහා වන මාර්ගය දක්වා මාණකරනය ක්රියාත්මක, වඩාත් මූලික වේ $0
(තිර රචනය නම) විචල්ය:
dirname "$0"
නමුත්, මැට් බී පෙන්වා දුන් පරිදි, පිටපත හැඳින්වෙන ආකාරය අනුව ආපසු යන මාර්ගය වෙනස් වේ. pwd
කාර්යය නොකරන්නේ එය ඔබට පවසන්නේ වර්තමාන නාමාවලිය යනු කුමක්ද යන්න මිස ස්ක්රිප්ට් එක පිහිටා ඇති ඩිරෙක්ටරිය නොවේ. මීට අමතරව, ස්ක්රිප්ට් එකකට සංකේතාත්මක සම්බන්ධතාවයක් ක්රියාත්මක කරන්නේ නම්, ඔබට (බොහෝ විට සාපේක්ෂ) මාර්ගයක් ලැබෙනු ඇත. සබැඳිය වාසය කරන තැන මිස සත්ය පිටපත නොවේ.
තවත් සමහරු readlink
විධානය සඳහන් කර ඇත , නමුත් එහි සරලම අවස්ථාවේදී ඔබට භාවිතා කළ හැකිය:
dirname "$(readlink -f "$0")"
readlink
ගොනු පද්ධතියේ මුල සිට ස්ක්රිප්ට් මාර්ගය නිරපේක්ෂ මාර්ගයකට විසඳනු ඇත. එබැවින්, තනි හෝ ද්විත්ව තිත්, ටයිල්ඩ් සහ / හෝ සංකේතාත්මක සම්බන්ධතා අඩංගු ඕනෑම මාර්ගයක් සම්පූර්ණ මාර්ගයකට විසඳනු ඇත.
මෙහි, මෙම එක් එක් පෙන්නුම් තිර රචනය තියෙන්නේ whatdir.sh
:
#!/bin/bash
echo "pwd: `pwd`"
echo "\$0: $0"
echo "basename: `basename $0`"
echo "dirname: `dirname $0`"
echo "dirname/readlink: $(dirname $(readlink -f $0))"
සාපේක්ෂ මාර්ගයක් භාවිතා කරමින් මෙම පිටපත මගේ නිවසේ ධාවනය කිරීම:
>>>$ ./whatdir.sh
pwd: /Users/phatblat
$0: ./whatdir.sh
basename: whatdir.sh
dirname: .
dirname/readlink: /Users/phatblat
නැවතත්, නමුත් පිටපතට සම්පූර්ණ මාර්ගය භාවිතා කිරීම:
>>>$ /Users/phatblat/whatdir.sh
pwd: /Users/phatblat
$0: /Users/phatblat/whatdir.sh
basename: whatdir.sh
dirname: /Users/phatblat
dirname/readlink: /Users/phatblat
දැන් නාමාවලි වෙනස් කිරීම:
>>>$ cd /tmp
>>>$ ~/whatdir.sh
pwd: /tmp
$0: /Users/phatblat/whatdir.sh
basename: whatdir.sh
dirname: /Users/phatblat
dirname/readlink: /Users/phatblat
පිටපත ක්රියාත්මක කිරීම සඳහා සංකේතාත්මක සබැඳියක් භාවිතා කිරීම:
>>>$ ln -s ~/whatdir.sh whatdirlink.sh
>>>$ ./whatdirlink.sh
pwd: /tmp
$0: ./whatdirlink.sh
basename: whatdirlink.sh
dirname: .
dirname/readlink: /Users/phatblat
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd && echo x)"
- සහ විධාන ආදේශනයකින් තොරව එය ඉවත් කරන්න -DIR="${DIR%x}"
.