mkdir -p
බොහෝ නවීන මෙහෙයුම් පද්ධති සඳහා භාවිතා කිරීම සරල ක්රමයකි:
mkdir -p foo/bar/zoo/andsoforth
කෙසේ වෙතත්, mkdir -p
බොහෝ අත්පොත් වල නිර්දේශ නොකරයි. ග්නූ සඳහා ලියකියවිලි කියවීම make
සහ autoconf
භාවිතා කිරීමේ ගැටළු පිළිබඳව mkdir -p
:
හරස් වේදිකා ස්ථාපනය සහ වින්යාස කිරීමේ පද්ධති සඳහා ඔවුන්ගේම ආරක්ෂිත විකල්ප ඇතmkdir -p
.
ෂෙල් විධාන රේඛාවේ භාවිතා කිරීමට CMake:
cmake -E make_directory foo/bar/zoo/andsoforth
පෙර සැකසුම් සමඟ ස්ක්රිප්ටයේ භාවිතා කිරීමට Autoconf:
AS_MKDIR_P(foo/bar/zoo/andsoforth)
හෝ:
AC_PROG_MKDIR_P(foo/bar/zoo/andsoforth)
එහෙත්, මේ විසඳුම් ඉල්ලා cmake
හෝ autoconf
( M4
) මෙවලම් ස්ථාපනය කල යුතු (සහ හැකි preprocessing)
ඔබට විකල්පයක් install-sh
සහිත ස්ක්රිප්ට් ද භාවිතා කළ -d
හැකිය:
install-sh -d foo/bar/zoo/andsoforth
මෙම ස්ක්රිප්ට් එක භාවිතා කරන්නේ autoconf
සහ automake
ව්යාපෘති කරයි. මම හිතන්නේ එය ආරක්ෂිතම විසඳුම විය යුතුයි.
ඒ වන විට මම යැපීමකින් /bin/sh
තොරව ප්රමිතිය සඳහා හරස් වේදිකා විසඳුමක් සොයමින් සිටියෙමි , නමුත් එකක් සොයාගෙන නැත. එබැවින් මම ඊළඟ පිටපත ලිව්වේ පරමාදර්ශී නොවිය හැකි නමුත් එය බොහෝ හරස් වේදිකා අවශ්යතාවයන්ට අනුකූල යැයි මම සිතමි :
#! /bin/sh
cdirname() # cross platform alternative for 'dirname'
{
# $1 - path
test $# -eq 1 || { echo "Procedure 'cdirname' must have only one parameter. Scripting error."; exit 1; }
echo "$1" | sed -n -e '1p' | sed -e 's#//*#/#g' -e 's#\(.\)/$#\1#' -e 's#^[^/]*$#.#' -e 's#\(.\)/[^/]*$#\1#' -
}
mkd() # cross platform alternative for 'mkdir -p'
{
# $1 - directory to create
test $# -eq 1 || { echo "Function 'mkd' can create only one directory (with it's parent directories)."; exit 1; }
test -d "$1" && return 0
test -d "$(cdirname "$1")" || { mkd "$(cdirname "$1")" || return 1; }
test -d "$1" || { mkdir "$1" || return 1; }
return 0
}
මෙම විධානාවලිය විකල්පය එහිදී පැරණි පද්ධති සඳහා භාවිතා කළ හැකි -p
සඳහා mkdir
ද යන්නයි.
sed
dirname
කේතයට පාදක කරගත් හරස් වේදිකා අනුවාදය එකතු කරන ලදි. එය සමාන ආකාරයකින් ක්රියා කරයි dirname
(මාර්ගය සමඟ නිවැරදි කරන්න /
, මූලික නම සහිත මාර්ග පමණක්, පසුපස ඇති මාර්ග/
මාර්ග, හා රහිතව ඇති මාර්ග \n
). වත්මන් පෙදෙස සඳහා නව රේඛා හෝ අවලංගු අක්ෂර කිහිපයක් තිබේ නම් මෙම ශ්රිතයට නිවැරදිව ක්රියා කළ නොහැක. එය /
( //
, ///
) හි ඕනෑම සංයෝජනයක් තනි ආදේශ කරයි/
රේඛාව වෙනස් කරන mkdir "$1" || return 1
ලදිtest -d "$1" || { mkdir "$1" || return 1; }
නිසා mkdir
දෝෂය සමඟ අවසන් කිරීමක් මාර්ගය නම් පවතී මෙම පරික්ෂාව වැනි ඉදිකිරීම් අඩංගු මාර්ග සඳහා අවශ්ය වන්නේ aaa\.
(නම් aaa
නොපවතියි පෙර අනුවාදය නිර්මාණය aaa
හා පසුව එය නැවත නිර්මාණය කිරීමට උත්සාහ).
මාර්ගය දැනටමත් තිබේ නම් mkd හි මෙම අනුවාදය දෝෂයක් ජනනය නොකරයි (නමුත් සමාන්තරව ක්රියාත්මක කිරීමේදී එවැනි දෝෂයක් ජනනය කිරීමේ හැකියාව තවමත් පවතී) සහ විධාන රේඛාවේ නාමාවලි කිහිපයක් ලබා ගත නොහැක.