මම බොහෝ දේ පුනරුච්චාරණය කරමි.
mkdir longtitleproject
cd longtitleproject
නාමාවලි නාමය පුනරාවර්තනය නොකර එක් පේළියකින් එය කිරීමට ක්රමයක් තිබේද? මම මෙතන ඉන්නේ
mkdir longtitleproject
ඉන්පසුcd !^
මම බොහෝ දේ පුනරුච්චාරණය කරමි.
mkdir longtitleproject
cd longtitleproject
නාමාවලි නාමය පුනරාවර්තනය නොකර එක් පේළියකින් එය කිරීමට ක්රමයක් තිබේද? මම මෙතන ඉන්නේ
mkdir longtitleproject
ඉන්පසුcd !^
Answers:
කිසිදු බිල්ට් විධාන තියෙනවා, නමුත් ඔබට ඉතා පහසුවෙන් හඳුන්වා තිබෙන්නේ ඒ උත්සවයකට ලියන්න පුළුවන් mkdir
නම් cd
:
mkcd () {
mkdir "$1"
cd "$1"
}
මෙම කේතය ඔබගේ ~/.bashrc
ගොනුවේ දමන්න (හෝ ~/.kshrc
ksh භාවිතා කරන්නන් ~/.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"
}
එයින් අදහස් වන්නේ ඩිරෙක්ටරිය දැනටමත් තිබේ නම් එය ද ක්රියාත්මක වන බවයි.
-p
Mkdir සඳහා ඇති විකල්පය දෝෂ මැඩපවත්වනු ඇත.
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.sh
source ~/.bashrc
වත්මන් සැසිය තුළ එය පරිදි කරන්න.
මෙයින් පසු, ඔබට mkcd some_dir
එම ඩිරෙක්ටරියට සෘජුවම ඇතුලත් කිරීමට සහ ඇතුළත් කිරීමට භාවිතා කළ හැකිය .
~/.bashrc
ගොනුවට එකතු කිරීමද (දැනටමත් ලබා දී ඇති පිළිතුරක් සමඟ)? මෙම mkcd.sh
පිටපත නිර්මාණය කිරීමට ඔබ යෝජනා කරන්නේ කෙසේද? සංස්කාරකයෙකු සමඟ, සමහර විට? මෙය සංස්කරණයට වඩා වැඩක් සේ පෙනේ ~/.bashrc
. පිළිගත් පිළිතුරට වඩා මෙයින් ඇති වාසිය කුමක්ද? පීඑස් ප්රශ්න උපුටා දැක්වීම නිසා මෙය අසාර්ථක වනු ඇත.
mcd
unix.stackexchange.com/questions/6628/…