mkdir fooへのショートカットがあり、すぐにそこにcdしますか?


89

これは私が頻繁に行うことです

$ mkdir foo
$ cd foo

これは単一のコマンドとして機能しますが、キーストロークが多く、時間を節約できません。

$ mkdir foo && cd foo

これにショートカットはありますか?

編集

以下のヘルプを使用すると、これが最もエレガントな答えのようです。

# ~/.bashrc
function mkcd {
  if [ ! -n "$1" ]; then
    echo "Enter a directory name"
  elif [ -d $1 ]; then
    echo "\`$1' already exists"
  else
    mkdir $1 && cd $1
  fi
}

1
関数本体でmkdir使用するcommand mkdir $1代わりに、関数の名前をに変更できますmkdir $1
アンディ

2
(1)なぜ「&&」ではなく単に「mkdir $ 1; cd $ 1」ではないのですか?そうすれば、「mkdir」が失敗しても「cd」は成功し、does-it-already-existed-scaffoldは必要ありません。(2)書かれているように、関数は機能しません(ディレクトリ名の入力を求めます)。存在テストとは別の「if」節に入れる必要があります(現在は「elif」にあります)。
いんちきキホーテ

回答:


45

私はLinux / bashのエキスパートではありませんが、これをに入れてみてください.bashrc

function mkdir
{
  command mkdir $1 && cd $1
}

PSを使用してくれたデニスに感謝しcommand mkdirます。


2
代わりに`which mkdir`、単に使用しますcommand mkdir
デニスウィリアムソン

1
ありがとうデニス。下には何もありませんman command-参照先を教えてもらえますか?(私はそれが何をするかを解決することができますが、徹底的であるために支払う;)
アンディ

2
commandのマニュアルにbash記載されています(これは組み込みです。別個のコマンドではありません)。試すこともできhelp commandます。
-grawity

これはzsh btwでも機能します
Florian Loch 14

94

bashzshシェル

他の関数に記憶させたくない場合、bashismを気にしない場合:

$ mkdir /home/foo/doc/bar && cd $_

$_(ドルアンダースコア)bashコマンドの変数は、最新のパラメータが含まれています。そのため、ユーザーがコマンドラインでecho foo bar && echo $_ baz次のように入力した場合、出力は次のようになります。

foo bar
bar baz

fishシェル

フィッシュシェルでは、次のように入力します。

> mkdir / home / foo / doc / bar
> cd alt + ↑

altキーを上矢印キーまたは下矢印キーと組み合わせて使用​​すると、コマンドパラメーターの履歴が循環します。


4
これも機能しzshます。
ナビルカディミ14

3
$ _とは何か説明できますか?ここの初心者。
arg20 14年

@NabilKadimi <kbd> Alt <kbd> + <kbd>⬆<kbd>はZshでうまく機能するということですか?実際、zsh 5.4.2およびon-my-zshでは、Alt +⬆で文字「A」が表示されます。
週末

$ _の+1-バカなセクシーフランダース!
cig0


10

どうですか:

$ mkdir newdirname; cd $_

&&を使用するよりも少し簡単です。


26
ポイントは、&&そのされcdた場合に実行されることはありませんmkdir、コマンドが失敗した
slhck

1
@slhckは、それがキホーテのポイントでした:mkdirが失敗した場合でも(たとえば、既に存在する場合、ユーザーが2番目のコマンドを書いて実際にパスにcdするように強制します)。しかし、これが答えとは反対に、それは簡単ではありません:&&は;より複雑ではありません。
モアラ

7

次のようなものを試すことができます:

#!/bin/sh
mkdir $1 && cd $1

/ usr / local / binや〜/ binなど、パスにある場所にこのスクリプトを保存します(この最後のスクリプトを〜/ .profileファイルのパスに配置する必要があります)。その後、単にそれを呼び出すことができます。


4
これはどのように機能しますか?スクリプトの呼び出しのcdコンテキストでは~/bin/mkcdなく、スクリプトの実行のコンテキスト内のみにあるようです。
エリックアリク

5
$echo 'mkcd() { mkdir -p "$@" && cd "$_"; }' >> ~/.bashrc
$mkcd < pathtofolder/foldername >

2

以下は、~/.config/fish/config.fishこのタスクを実行するファイルに入れた簡単な関数です。

function mkcd
    mkdir -pv $argv;
    cd $argv;
end

この-pvタグを使用すると、サブディレクトリを含むディレクトリを作成できます。


0

ディレクトリが既に存在する場合、望ましい結果に応じて。

ディレクトリが既に存在する場合は失敗する

mkcd() {
    mkdir $1 && cd $1
}

関係なくディレクトリを変更

mkcd() {
    mkdir $1 ; cd $1
}

使用法 mkcd some / path / to / my / dir


0

以下の関数は1つのディレクトリしか作成できないことがわかりましたが、同時にサブディレクトリを作成したい場合は機能しません:

function mkdir
{
  command mkdir $1 && cd $1
}

だから私はそれを変更し、今ではうまく機能しています!

function mkcd
{
  command mkdir -pv $1 && cd $1 && echo "Now in `pwd`"
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.