আমি নিজেকে প্রচুর পুনরাবৃত্তি করতে দেখি:
mkdir longtitleproject
cd longtitleproject
ডিরেক্টরি নামটি না বার করে কি এক লাইনে এটি করার কোনও উপায় আছে? আমি এখানে বাশ এ।
mkdir longtitleprojectতারপরেcd !^
আমি নিজেকে প্রচুর পুনরাবৃত্তি করতে দেখি:
mkdir longtitleproject
cd longtitleproject
ডিরেক্টরি নামটি না বার করে কি এক লাইনে এটি করার কোনও উপায় আছে? আমি এখানে বাশ এ।
mkdir longtitleprojectতারপরেcd !^
উত্তর:
কোন বিল্ট-ইন কম্যান্ড, কিন্তু আপনি সহজেই একটি ফাংশন যা কল লিখতে পারেন 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 বা আরও বেশি সংখ্যার পরে আসে তবে cdzsh এটিকে ডিরেক্টরি স্ট্যাকের সূচক হিসাবে ব্যাখ্যা করবে 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/foocd mylink/../foofoocd /tmp/mylink; mkdir ../foo; cd ../foo/somewhere/else/foo/tmp/foocd..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"
}
এর অর্থ এটি ডিরেক্টরিটি ইতিমধ্যে উপস্থিত থাকলে এটিও কাজ করে।
-pMkdir, বিকল্প ত্রুটি দমন হবে।
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। গৃহীত উত্তরের চেয়ে এর কী কী সুবিধা? ………………………………………………………………………………… পিএস এই সমস্যাগুলি উদ্ধৃত করার কারণে ব্যর্থ হবে, যা আমাকে নিজেও চেষ্টা করে দেখেনি বলে জানিয়েছে)।
mcdunix.stackexchange.com/questions/6628/…