මම බොහෝ දේ පුනරුච්චාරණය කරමි.
mkdir longtitleproject
cd longtitleproject
නාමාවලි නාමය පුනරාවර්තනය නොකර එක් පේළියකින් එය කිරීමට ක්රමයක් තිබේද? මම මෙතන ඉන්නේ
mkdir longtitleprojectඉන්පසුcd !^
මම බොහෝ දේ පුනරුච්චාරණය කරමි.
mkdir longtitleproject
cd longtitleproject
නාමාවලි නාමය පුනරාවර්තනය නොකර එක් පේළියකින් එය කිරීමට ක්රමයක් තිබේද? මම මෙතන ඉන්නේ
mkdir longtitleprojectඉන්පසුcd !^
Answers:
කිසිදු බිල්ට් විධාන තියෙනවා, නමුත් ඔබට ඉතා පහසුවෙන් හඳුන්වා තිබෙන්නේ ඒ උත්සවයකට ලියන්න පුළුවන් mkdirනම් cd:
mkcd () {
mkdir "$1"
cd "$1"
}
මෙම කේතය ඔබගේ ~/.bashrcගොනුවේ දමන්න (හෝ ~/.kshrcksh භාවිතා කරන්නන් ~/.zshrcසඳහා හෝ zsh භාවිතා කරන්නන් සඳහා). එය ශ්රිතයක් අර්ථ දක්වයි mkcd. "$1"ඔබ එය ක්රියාත්මක කරන විට ශ්රිතය පරාමිතිය මගින් ප්රතිස්ථාපනය වේ.
මෙම සරල අනුවාදයේ අඩුපාඩු කිහිපයක් තිබේ:
-pවිකල්පය වෙත යන්න mkdir. (මෙය හඳුනාගත නොහැකි යතුරු ලියනයක අවදානම වැඩි කරන බැවින් මෙය යෝග්ය විය හැකිය හෝ නොවිය හැකිය, උදා: mkcd mydierctory/newsubසතුටින් නිර්මාණය වනු ඇති mydierctoryඅතර mydierctory/newsubඔබ newsubපවතින ඇතුළත නිර්මාණය කිරීමට අදහස් කරන විට mydirectory.)-නමුත් පමණක් ම නො වේ -, එසේ නම් mkdirහා cdඑය විකල්පයක් ලෙස අර්ථ නිරූපණය වනු ඇත. එය හුදෙක් එය නම් -, එසේ නම් cdඅර්ථය ගෙන දෙන පරිදි අර්ථ නිරූපණය වනු ඇත $OLDPWD. එය +ඉලක්කම් 0 ක් හෝ වැඩි ගණනක් අනුගමනය කරන්නේ නම් cd, zsh හි එය නාමාවලි තොගයේ දර්ශකයක් ලෙස අර්ථ නිරූපණය කරයි. ඔබට පළමු ගැටළුව විසඳා ගත හැකිය, නමුත් අනෙක් දෙක නොවේ, --තර්කයට පෙර සම්මත වීමෙන් . ./සාපේක්ෂ මාර්ගයක් නම් තර්කයට සූදානම් වීමෙන් ඔබට මෙම සියලු ගැටලු විසඳා ගත හැකිය .mkdirඅනුගමනය නොකෙරේ CDPATH, නමුත් cdඑසේ නොවේ, එබැවින් ඔබ CDPATHආරම්භ නොවන අගයකට .(තරමක් අසාමාන්ය වින්යාසයක් ඇති බව පිළිගෙන තිබේ නම්), cdඔබ විසින් නිර්මාණය කරන ලද නාමාවලියට වඩා වෙනස් නාමාවලියකට ඔබව ගෙන එනු ඇත. ./සාපේක්ෂ මාර්ග වලට පෙර සූදානම මෙය නිවැරදි කරයි (එය CDPATHනොසලකා හැරීමට හේතු වේ).mkdirඅසමත්, එය ක්රියාත්මක කිරීමට උත්සාහ cd. Fix: &&විධාන දෙක වෙන් කිරීමට භාවිතා කරන්න.තවමත් තරමක් සරලයි:
mkcd () {
case "$1" in /*) :;; *) set -- "./$1";; esac
mkdir -p "$1" && cd "$1"
}
මෙම අනුවාදයට තවමත් එක් දාරයක නිර්මාණය කළ cdඩිරෙක්ටරියට වෙනස් ඩිරෙක්ටරියක් තුළට යාමට හැකියාවක් ඇත mkdir: තර්කය mkcdඅඩංගු වන ..අතර සංකේතාත්මක සබැඳියක් හරහා යන්නේ නම්. උදාහරණයක් ලෙස, නම් වත්මන් නාමාවලිය /tmp/hereහා mylinkකිරීම සඳහා සංකේතමය සම්බන්ධයක් /somewhere/elseනම් mkdir mylink/../fooනිර්මාණය /somewhere/else/fooබැවින්ද cd mylink/../fooබවට වෙනස් foo. තර්කය තුළ සංකේතාත්මක සබැඳි සෙවීම පමණක් ප්රමාණවත් නොවේ, මන්ද යත් කවචය එහි වත්මන් නාමාවලියෙහි සංකේතාත්මක සබැඳි ලුහුබඳින බැවිනි, එබැවින් cd /tmp/mylink; mkdir ../foo; cd ../fooනව ඩිරෙක්ටරියට ( /somewhere/else/foo) නොව වෙනස් වේ /tmp/foo. මේ සඳහා cdවිසඳුමක් නම්, සියලු ..මාර්ග සංරචක මුලින්ම විසඳීමට බිල්ඩින්ට ඉඩ දීමයි ( foo/..එසේ නම් එය භාවිතා කිරීම තේරුමක් නැතfooනොපවතින බැවින් mkdirකිසි විටෙක කිසිවක් දැකීමට අවශ්ය නොවේ ..).
තරමක් රුදුරු අනුවාදයක් නම් අපි මෙම ශක්තිමත් වෙත පැමිණෙමු:
mkcd () {
case "$1" in
*/..|*/../) cd -- "$1";; # that doesn't make any sense unless the directory already exists
/*/../*) (cd "${1%/../*}/.." && mkdir -p "./${1##*/../}") && cd -- "$1";;
/*) mkdir -p "$1" && cd "$1";;
*/../*) (cd "./${1%/../*}/.." && mkdir -p "./${1##*/../}") && cd "./$1";;
../*) (cd .. && mkdir -p "${1#.}") && cd "$1";;
*) mkdir -p "./$1" && cd "./$1";;
esac
}
(ව්යායාම: පළමු cdඇමතුම සඳහා මා උපසිරැසියක් භාවිතා කරන්නේ ඇයි ?)
Mkdir අසමත් වුවහොත්, වත්මන් නාමාවලිය වෙනස් නොකිරීමට මට අවශ්යය. සෙල් - හෝ LD OLDPWD සමඟ නැවත වෙනස් කිරීම ෂෙල් එකට එහි වත්මන් නාමාවලියට වෙනස් කිරීමට අවසර නොමැති නම් ප්රමාණවත් නොවේ. එසේම, සීඩී යාවත්කාලීන කිරීම් OLDPWD ලෙස හැඳින්වීම, එබැවින් අපට එය කිරීමට අවශ්ය වන්නේ එක් වරක් පමණි (හෝ OLDPWD ප්රතිස්ථාපනය කරන්න).
පෙර පේළියේ සිට වචනය නැවත ටයිප් නොකිරීමට අඩු විශේෂිත ක්රම ද ඇත:
cd නම්, Esc .(හෝ Alt+ .) පසුගිය විධානය පසුගිය තර්කය ඇතුල් කිරීමට.cd !$cdපෙර විධානයේ අවසාන තර්කය මත ක්රියාත්මක කරයි .mkdirබවට cd.ksh, ද වැඩ zsh) "මීට පෙර විධානය නැවත පසුගිය වචනය" සඳහා අනුපිළිවෙල. මම එය බොහෝ විට භාවිතා කරමි.
/a/b/..//ඇත්ත වශයෙන්ම ක්රියා කරයි නමුත් එසේ නොවේ /a/b/../c. ස්ථාවර. මම ප්රශ්නය පුළුල් ප්රේක්ෂක පිරිසකට යොමු කර ඇත්තෙමි.
mkcd() { mkdir -p "$1" && cd "$1"; }(මගේ උදාහරණය) zsh හි ගැටලුවක් ලෙස නොපෙනේ. mkdir -p /var/tmp/somewhere/else /tmp/here; cd /tmp/here; ln -s /var/tmp/somewhere/else mylink; mkdir -p mylink/../foo && cd mylink/../foo; pwd(සැකසුම ඇතුළත් වේ) සහ /tmp/here/fooනිර්මාණය කරන ලද සංදර්ශන (සහ මා බලාපොරොත්තු වූ දේ). bashවැරදි ලෙස නිර්මාණය කර වෙනස් කරයි /var/tmp/somewhere/foo.
ඔබට අවශ්ය එක් ලයිනර් මෙයයි. වෙනත් වින්යාසයක් අවශ්ය නොවේ:
mkdir longtitleproject && cd $_
මෙම $_විචල්ය, bash දී, පෙර භාවිතා කිරීමට ලබා දුන් අවසන් තර්කයකි. මෙම අවස්ථාවේදී, ඔබ දැන් නිර්මාණය කළ නාමාවලියෙහි නම. විස්තර කර ඇති පරිදි man bash:
_ At shell startup, set to the absolute pathname used to invoke
the shell or shell script being executed as passed in the envi‐
ronment or argument list. Subsequently, expands to the last
argument to the previous command, after expansion. Also set to
the full pathname used to invoke each command executed and
placed in the environment exported to that command. When check‐
ing mail, this parameter holds the name of the mail file cur‐
rently being checked."$_" is the last argument of the previous command.
ෂෙල් ඉතිහාසයේ පෙර විධානයේ අවසාන තර්කය ලබා දෙන නිසා cd $_වෙනුවට පෙර විධානයේ අවසාන තර්කය ලබා ගැනීමට භාවිතා කරන්න :cd !$cd !$
cd ~/
mkdir folder && cd !$
ඔබ ගෙදර යයි (හෝ ~ /)
cd ~/
mkdir newfolder && cd $_
ඔබ අවසන් වන්නේ නිවස යටතේ නව ෆෝල්ඩරයක !! (හෝ ~ / නව ෆෝල්ඩරය)
mkdir foo && cd fooවන අතර එය පහසු නැත.
&& cd $_යතුරු නිවසේ පේළියෙන් බොහෝ away තින් ඇති බැවින් මම වැරදියට ටයිප් කිරීමට බොහෝ දුරට ඉඩ ඇත , එබැවින් තාක්ෂණිකව නිවැරදි වුවත් එය ergonomic නොවේ. එය පරිසරය මත රඳා නොපවතින බවත් දැන ගැනීම ප්රයෝජනවත් බවත් මම අගය කරමි. ස්තූතියි!
මෙම හැසිරීම ලිවීම මට කිසි විටෙකත් සිදු නොවනු ඇත, මන්ද මම පහත සඳහන් කරුණු පැයකට ආසන්න කාලයක් ඇතුළත් කරමි ...
$ mkdir someDirectory<ENTER>
$ cd !$
එහිදී බාෂ් කාරුණිකව !$අන්තිම පේළියේ අවසාන වචනය සමඟ ආදේශ කරයි; එනම් ඔබ ඇතුළත් කළ දිගු නාමාවලි නාමය.
මීට අමතරව, එවැනි අවස්ථාවන්හිදී ගොනු නාමය සම්පූර්ණ කිරීම ඔබේ මිතුරා වේ. ඔබගේ නව නාමාවලිය ෆෝල්ඩරයේ ඇති එකම ගොනුව නම් ඉක්මන් දෙගුණයක් TABමඟින් නව නාමාවලිය නැවත ඇතුළත් නොකර ඔබට ලබා දෙනු ඇත.
අනෙක් පිළිතුරු යෝජනා කරන පරිදි බාෂ් ඔබට එවැනි පොදු කාර්යයන් ස්ක්රිප්ට් කිරීමට ඉඩ සලසන බව සිසිල් වුවත්, මම සිතන්නේ බාෂ් විසින් ලබා දිය යුතු විධාන රේඛා සංස්කරණ අංග ඉගෙන ගැනීම වඩා හොඳ වන අතර එමඟින් ඔබ වෙනත් යන්ත්රයක වැඩ කරන විට සින්ටැක්ටික් නැති නොවේ. ඔබේ අභිරුචි ස්ක්රිප්ට් සපයන සීනි.
අනුව අභිරුචිකරණය ඔබ ඵලදායීතාව ඉහළ නැංවීම සඳහා ඔබගේ ෂෙල් පැතිකඩ මත සිදු කර ඇත කුමක්ද? , මම මෙය කරන්නේ මෙයයි:
# make a directory and cd to it
mcd()
{
test -d "$1" || mkdir "$1" && cd "$1"
}
එයින් අදහස් වන්නේ ඩිරෙක්ටරිය දැනටමත් තිබේ නම් එය ද ක්රියාත්මක වන බවයි.
-pMkdir සඳහා ඇති විකල්පය දෝෂ මැඩපවත්වනු ඇත.
mcdවිධානය කුමක්ද? මෙම විධානය සපයන පැකේජය හෝ ව්යාපෘතිය කුමක්ද?
ඔබ Oh My Zsh භාවිතා කරන්නේ නම්, take නම් විධානයක් ඇත , එය හරියටම මෙය කරයි. එය මේ වගේ දෙයක් වනු ඇත.
take myfolder
මම මෙය අහම්බෙන් සොයා ගත්තා. මම බලා එය ලැයිස්තුගත කරනවා මෙම cheatsheat මෙම අපොයි මගේ Zsh GitHub විකියෙන්. එය බෙහෙවින් ප්රයෝජනවත් විධානයක් වන අතර පෙනෙන පරිදි ඔබම නිර්මාණය කිරීම ඉතා පහසුය.
take:) පරිපූර්ණයි! btw - iTerm2 සමඟ Oh My Zsh. ඇත්ත වශයෙන්ම මෙහි පරිපූර්ණ පිළිතුරු 3 ක් ඇත. මෙය, ජෙසෙස්-කැරෙරා විසින්, සහ තෝරාගත් පිළිතුර. ඔබගේ සැකසුම සහ මනාපය මත රඳා පවතී.
මෙහි සඳහන් කළ යුතු සුළු ප්රභේදයක් මෙන්න:
function mkdir() {
local dir=$1
command mkdir "$dir" && cd "$dir"
}
මෙය ඔබගේ වෙත එක් කරන්න, ~/.bash_profileඑවිට ඔබට mkdirසාමාන්ය පරිදි භාවිතා කළ හැකිය (ඔබ sourceඑය කළ පසු), දැන් හැර එය සම්මත mkdirවිධානයට වඩා ඉහත ශ්රිතය ක්රියාත්මක කරයි .
සටහන, මෙය ගිලෙස් විසින් පිළිගත් පිළිතුරට අනුව ආදානය වලංගු නොවන නමුත් ඔබට බිල්ඩින් අභිබවා යා හැකි ආකාරය (effectively ලදායී ලෙස) පෙන්නුම් කරයි.
ලියකියවිලි වලින් (තරමක් අක්ෂර වින්යාසය):
command mkdir [args]දිවෙනmkdirසමඟargsනම් ඕනෑම ෂෙල් කාර්යය නොසලකා හරිමින්mkdir. PATH සෙවීමෙන් සොයාගත් ෂෙල් බිල්ඩින් විධාන හෝ විධාන පමණක් ක්රියාත්මක වේ. නම් කරන ලද ෂෙල් ශ්රිතයක් තිබේ නම්ls,command lsශ්රිතය තුළ ක්රියාත්මක වීම මඟින්lsශ්රිතය පුනරාවර්තනය ලෙස හැඳින්වීම වෙනුවට බාහිර විධානය ක්රියාත්මක කරනු ඇත
ඒ builtinහා සමාන ප්රති result ලයක් ලැබෙනු ඇතැයි මම විශ්වාස කරමි command.
$dir
commandවිකල්පයක් ලෙස භාවිතා කිරීම ඉදිරිපත් කරමි .
mkcdඔබේ පරිසරයට එක් පේළියකින් විධානයක් සාදන්න
echo -e 'mkcd() {\n mkdir -p "$1" && cd $_\n}' >> ~/.${0//-/}rc && . ~/.${0//-/}rc
මම ඩිරෙක්ටරිය නිර්මාණය කරන ස්ක්රිප්ට් එකක් සාදා පසුව සීඩී එයට, මම අන්වර්ථයක් ලබා දුන්නා. මෙන්න මම එය විස්තර කරන සාරාංශයක්.
https://gist.github.com/rehnen/34236d6ff270ccaa74b6#mkdir-like-it-was-meant-to-be
ඉහත පිළිතුරු ස්වයංක්රීය කර එක් වරක් ක්රියාත්මක කළ හැකි පිටපතක් සාදන්න:
fun='
mkcd ()
{
mkdir -p -- "$1" && cd -P -- "$1"
}'
echo "$fun" >> ~/.bashrc
මෙය නව ගොනුවක පිටපත් කර පර්යන්තයෙන් එක් වරක් පමණක්mkcd.sh ක්රියාත්මක කරන්න . ඉන්පසු ක්රියාත්මක කරන්නbash mkcd.shsource ~/.bashrcවත්මන් සැසිය තුළ එය පරිදි කරන්න.
මෙයින් පසු, ඔබට mkcd some_dirඑම ඩිරෙක්ටරියට සෘජුවම ඇතුලත් කිරීමට සහ ඇතුළත් කිරීමට භාවිතා කළ හැකිය .
~/.bashrcගොනුවට එකතු කිරීමද (දැනටමත් ලබා දී ඇති පිළිතුරක් සමඟ)? මෙම mkcd.shපිටපත නිර්මාණය කිරීමට ඔබ යෝජනා කරන්නේ කෙසේද? සංස්කාරකයෙකු සමඟ, සමහර විට? මෙය සංස්කරණයට වඩා වැඩක් සේ පෙනේ ~/.bashrc. පිළිගත් පිළිතුරට වඩා මෙයින් ඇති වාසිය කුමක්ද? පීඑස් ප්රශ්න උපුටා දැක්වීම නිසා මෙය අසාර්ථක වනු ඇත.
mcdunix.stackexchange.com/questions/6628/…