web-dev-qa-db-ja.com

mkdirを新しく作成したディレクトリにcdするにはどうすればよいですか?

多くの場合、これらのコマンドをbashで入力します。

mkdir something
cd something

私はほとんどこれをしません:

mkdir something
ls # something in the current directory, not ./something/

そして決してこれはありません:

mkdir something something2

新しく作成したディレクトリにmkdircdを含めるにはどうすればよいですか?つまり、mkdir somethingの場合、コマンドcd somethingはすぐに実行されます。

例:

$ pwd
/home/me
$ mkdir something
$ pwd
/home/me/something
8
programmer5000

関数を作成することをお勧めします。

function mydir(){ mkdir -p "$1" && cd "$1"; }

それはあなたが望むことをします、あなたはそれをあなたのすべてのシェルで利用できるようにあなたの.bashrcに追加することができます.

  • $1は、関数に送信する最初の引数、ディレクトリの名前です。

次のように使用できます。

$ mydir ~/my-new-directory
$ pwd
~/my-new-directory

注:mydirmkdirで変更してオーバーライドできますが、mydircmkdirなどのシステムに存在しないカスタム名をお勧めします。 type commandを使用して、コマンドが存在するかどうかを確認できます。

14
Ravexina

コマンドの最後の引数を使用する

作成されたディレクトリの名前を再入力する必要はありません。 $_変数を使用:

Bash 4.3マニュアルから:

   _      At Shell startup, set to the absolute pathname  used
          to  invoke  the Shell or Shell script being executed
          as passed in the environment or argument list.  Sub‐
          sequently,  expands to the last argument to the pre‐
          vious command, after expansion.  

したがって、使用方法は次のようになります。

bash-4.3$ mkdir mydir
bash-4.3$ cd $_

「{list;}」複合コマンドを使用する

1行だけを使用する場合は、コマンドを複合コマンド{に結合します({の前の先行スペースと各コマンドのセミコロンが必要です)。

bash-4.3$ pwd
/home/xieerqi
bash-4.3$ { mkdir mydir;cd $_;}
bash-4.3$ pwd
/home/xieerqi/mydir

リスト内のすべてのコマンドは現在のシェル環境で実行されるため、この{list;}複合コマンド構造が選択されていることに注意することが重要です。

そして、すべてを何度も入力するのを避けたい場合は、エイリアスを作成できます。

bash-4.3$ alias mkcd='{ IFS= read -r d && mkdir "$d" && cd "$d"; } <<<' 
bash-4.3$ pwd
/home/xieerqi
bash-4.3$ mkcd "mydir"
bash-4.3$ pwd
/home/xieerqi/mydir

ここでは、両方に"$d"変数を使用しましたが、"$_"と同じように使用することもできます。

bash-4.3$ alias mkcd='{ IFS= read -r d && mkdir "$d" && cd "$_"; } <<<'
14

私は通常mkdir somethingcdでフォローしますAlt + . 前のコマンドの最後の引数、つまりディレクトリ名でコマンドを完了します。

9
choroba

関数

小さいfunctionを作成して、~/.bashrcファイルに保存できます。ファイルを編集して、次の行を追加します。

md () {
 mkdir "$1" && cd "$1"
}

走る

source ~/.bashrc

現在の端末[ウィンドウ]で変更を有効にするため。新しいターミナルを開くと、新しい関数がそこにあります。

コマンド間で&&を使用すると、cdコマンドが成功した場合にのみmkdirコマンドが実行されます。

例:このような関数mdを使用して、テストディレクトリtestdirを現在のディレクトリ(この場合はプロンプトから見たホームディレクトリ)に作成できます。

sudodus@xenial32 ~ $ md testdir
sudodus@xenial32 ~/testdir $ 

Bashシェルスクリプトが期待どおりに機能しませんでした

また、この目的のために小さいbash shellscriptを使用することの難しさについても説明します。

~/binディレクトリにシェルスクリプトを保存できます。 ~/binを作成して再起動すると、PATHになります。

標準コマンドで使用されていない名前を使用します(たとえば、mdscript)。

#!/bin/bash

mkdir "$1" && cd "$1"

スクリプトを実行可能にする

chmod ugo+x ~/bin/mdscript

これは、意図したとおりには機能しません。

mdscript testdir

なぜなら、現在のディレクトリはシェルスクリプトのサブプロセスでのみ変更され、シェルスクリプトの終了後はターミナル[ウィンドウ]で変更されないためです。

「ソース」のときに機能し、コマンドラインで実行します

source mdscript testdir

しかし、これは便利ではなく、元の質問に対する良い答えではありません。

pwdコマンドをシェルスクリプトに追加すると、その動作を確認できます

#!/bin/bash

mkdir "$1" && cd "$1"
pwd

スクリプトmdscriptを実行します

sudodus@xenial32 ~ $ mdscript testdir
/home/sudodus/testdir
sudodus@xenial32 ~ $ 
6
sudodus