আমি নিজেকে প্রচুর পুনরাবৃত্তি করতে দেখি:
mkdir longtitleproject
cd longtitleproject
ডিরেক্টরি নামটি না বার করে কি এক লাইনে এটি করার কোনও উপায় আছে? আমি এখানে বাশ এ।
mkdir longtitleproject
তারপরেcd !^
আমি নিজেকে প্রচুর পুনরাবৃত্তি করতে দেখি:
mkdir longtitleproject
cd longtitleproject
ডিরেক্টরি নামটি না বার করে কি এক লাইনে এটি করার কোনও উপায় আছে? আমি এখানে বাশ এ।
mkdir longtitleproject
তারপরেcd !^
উত্তর:
কোন বিল্ট-ইন কম্যান্ড, কিন্তু আপনি সহজেই একটি ফাংশন যা কল লিখতে পারেন 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 এটিকে ডিরেক্টরি স্ট্যাকের সূচক হিসাবে ব্যাখ্যা করবে interpret আপনি প্রথম সমস্যাটি ঠিক করতে পারেন, তবে অন্য দুটি নয়, তর্কটির --
আগে পেরিয়ে। যদি আপনি ./
কোনও আপেক্ষিক পথটি থাকেন তবে যুক্তিটিকে প্রিপেন্ড করে আপনি এই সমস্ত সমস্যার সমাধান করতে পারেন।mkdir
অনুসরণ করে না CDPATH
, তবে cd
তা করে না , তাই আপনি যদি CDPATH
এমন কোনও মান সেট করে থাকেন যা শুরু হয় না .
(স্বীকার করে নেওয়া কিছুটা অস্বাভাবিক কনফিগারেশন), তবে cd
সবেমাত্র তৈরি হওয়া থেকে আলাদা ডিরেক্টরিতে আপনাকে নিয়ে আসতে পারে। Prepending ./
আপেক্ষিক পাথ এই সংশোধন করা হয়েছে (এটা ঘটায় CDPATH
উপেক্ষা করা হয়)।mkdir
ব্যর্থ হয়, এটি কার্যকর করার চেষ্টা করে cd
। ফিক্স: &&
দুটি কমান্ড পৃথক করতে ব্যবহার করুন ।এখনও মোটামুটি সহজ:
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
কখনও কোনও দেখার দরকার নেই ..
)।
কিছুটা দুরন্ত সংস্করণে আমরা এই দৃust়তায় আসি:
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 ব্যর্থ হয়, আমি বর্তমান ডিরেক্টরিটি পরিবর্তন না করার বিষয়ে নিশ্চিত হতে চাই। সিডির সাথে ফিরে পরিবর্তন করা - বা শেলটির বর্তমান ডিরেক্টরিতে পরিবর্তনের অনুমতি না থাকলে $ OLDPWD যথেষ্ট ভাল নয়। এছাড়াও, সিডি আপডেটগুলি ওলডিপিডাব্লুডি কল করা, সুতরাং আমরা কেবল এটি একবার করতে চাই (বা ওলডিপিডাব্লুডি পুনরুদ্ধার করুন)।
পূর্ববর্তী লাইনটি থেকে শব্দটি পুনরায় টাইপ না করার জন্য কয়েকটি বিশেষ উপায়ও রয়েছে:
cd
, তারপর Esc .(অথবা Alt+ + .) পূর্ববর্তী হুকুম থেকে গত যুক্তি সন্নিবেশ করতে।cd !$
cd
পূর্ববর্তী কমান্ডের সর্বশেষ যুক্তি প্রয়োগ করে execmkdir
মধ্যে cd
।ksh
, এবং এতেও কাজ করে zsh
) ence আমি এটি প্রায়শই ব্যবহার করি।
/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 $_
$_
ব্যাশ- এ চলকটি পূর্ববর্তী কমান্ডকে দেওয়া সর্বশেষ যুক্তি। এই ক্ষেত্রে, আপনি সদ্য তৈরি করা ডিরেক্টরিটির নাম। হিসাবে ব্যাখ্যা করা হয়েছে 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
, যা সহজ নয়।
এই আচরণটি লিপিবদ্ধ করার জন্য এটি আমার কাছে কখনও ঘটত না কারণ আমি নীচের দিকে ঘন্টার পর ঘন্টা প্রবেশ করি ...
$ mkdir someDirectory<ENTER>
$ cd !$
যেখানে বাশ সদয়ভাবে !$
শেষ লাইনের শেষ শব্দের সাথে প্রতিস্থাপন করে; যেমন আপনি যে দীর্ঘ ডিরেক্টরি নামটি প্রবেশ করেছেন
তদুপরি, এইরকম পরিস্থিতিতে ফাইলের নাম সম্পূর্ণ হওয়া আপনার বন্ধু। আপনার নতুন ডিরেক্টরি যদি ফোল্ডারে একমাত্র ফাইল হয় তবে দ্রুত ডাবল TABআপনাকে নতুন ডিরেক্টরিটি পুনরায় প্রবেশ না করেই দেবে।
যদিও এটি দুর্দান্ত যে বাশ আপনাকে যেমন সাধারণ কাজগুলি স্ক্রিপ্ট করতে দেয় যেমন অন্যান্য উত্তরগুলি মনে করে আমি মনে করি যে কমান্ড লাইন সম্পাদনা বৈশিষ্ট্যগুলি বাশকে দেওয়া উচিত তা শেখা ভাল যা আপনি যখন অন্য কোনও মেশিনে কাজ করছেন তখন সিনট্যাকটিকটি মিস করছেন না learn আপনার কাস্টম স্ক্রিপ্টগুলি সরবরাহ করে এমন চিনি।
অনুযায়ী কি কাস্টমাইজেশন আপনি উত্পাদনশীলতা বৃদ্ধি করার জন্য আপনার শেল প্রোফাইলে করেছ? , আমি এটি এইভাবে করি:
# make a directory and cd to it
mcd()
{
test -d "$1" || mkdir "$1" && cd "$1"
}
এর অর্থ এটি ডিরেক্টরিটি ইতিমধ্যে উপস্থিত থাকলে এটিও কাজ করে।
-p
Mkdir, বিকল্প ত্রুটি দমন হবে।
mcd
কমান্ড কী? কোন প্যাকেজ বা প্রকল্প এই আদেশ দেয়?
আপনি ওহ আমার Zsh ব্যবহার করেন তাহলে, একটি কমান্ড নামক নিতে যে ঠিক এই আছে। এটি দেখতে এমন কিছু লাগবে।
take myfolder
আমি আসলে এটি দুর্ঘটনাক্রমে খুঁজে পেয়েছি। আমি কেবল দেখেছি এবং এটি ওহ আমার জেড জিটি গিথহাব উইকি থেকে এই চিটসেটে তালিকাভুক্ত । এটি বেশ কার্যকর কমান্ড এবং দৃশ্যত নিজেকে তৈরি করা খুব সহজ।
take
:) পারফেক্ট! বিটিডাব্লু - ওহ মাই জেডএস এর সাথে আইটির্ম 2 এখানে আসলে 3 নিখুঁত উত্তর আছে। এটি একটি, @ জেসেস-কেরেরা দ্বারা, এবং নির্বাচিত উত্তর। আপনার সেটআপ এবং পছন্দ উপর নির্ভর করে।
এখানে একটি সামান্য বৈকল্পিক যা উল্লেখযোগ্য:
function mkdir() {
local dir=$1
command mkdir "$dir" && cd "$dir"
}
এটি আপনার যুক্ত করুন ~/.bash_profile
এবং আপনি তারপরে mkdir
স্বাভাবিক হিসাবে ব্যবহার করতে পারবেন (একবার source
এটি হয়ে গেলে ), এখন বাদে এটি স্ট্যান্ডার্ড mkdir
কমান্ডের পরিবর্তে উপরের ফাংশনটি পরিচালনা করবে ।
দ্রষ্টব্য, এটি গিলস কর্তৃক গৃহীত উত্তর অনুসারে ইনপুটকে বৈধতা দেয় না , তবে আপনি কীভাবে বিল্টিনগুলি (কার্যকরভাবে) ওভাররাইড করতে পারেন তা প্রদর্শন করে।
দস্তাবেজগুলি থেকে (সামান্য প্যারাফ্রেসিং করা):
command mkdir [args]
রানmkdir
দিয়েargs
নামে কোনো শেল ফাংশন উপেক্ষাmkdir
। PATH অনুসন্ধান করে পাওয়া কেবল শেল বিল্টিন কমান্ড বা আদেশগুলি কার্যকর করা হয়। যদি কোনও শেল ফাংশন নামকরণ করা থাকে তবে ফাংশনটির মধ্যেls
চলমান ফাংশনটিকে পুনরাবৃত্তভাবে কল করার পরিবর্তেcommand ls
বাহ্যিক কমান্ড কার্যকর করবেls
আমি বিশ্বাস করি এর সাথে builtin
একই রকম ফলাফল পাওয়া যায় 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/…