イベントインジケータ

イベントインジケータ

以下を組み合わせる方法(bashで最も簡単な方法)はありますか?

mkdir foo
cd foo

マンページにはmkdirそのような内容は記載されていません。たぶん素晴らしいバージョンがありますかmkdir?私はこれがcd組み込みシェルでなければならないことを知っています。だからそれは素晴らしいもののためですmkdir...

ニックネーム?

答え1

関数を作成することがこれを行う最も適切な方法だと思います。ただし、すべての選択肢を一覧表示するには、次のように書くことができます。

mkdir foo && cd "$_"

$_前のコマンドの最後のパラメーターを保管する特殊パラメーター。フォルダ名にスペースが含まれていても、引用符を使用するとフォルダ名$_が正しく機能します。

二重引用符を使用するのはなぜですか?

zshたとえば、一部のシェルでは、ディレクトリ名にスペースが含まれていても二重引用符で囲む必要はありません。ただし、$_このコマンドを使用するにはbash

たとえば、macOS 10.13.6のbash 3.2.57で次のコマンドを実行します。

mkdir "my directory" && cd $_

結果は次のとおりです。

bash: cd: my: No such file or directory

ただし、$_二重引用符で囲むと、コマンドは正常に返されます。

bash-3.2$ mkdir "my directory" && cd "$_"
bash-3.2$ echo $?
0
bash-3.2$

答え2

機能?

mkcdir ()
{
    mkdir -p -- "$1" &&
       cd -P -- "$1"
}

上記のコードをシェルで提供する~/.bashrcか、シェルが提供する他のファイルに配置します。~/.zshrc次に、たとえばsource ~/.bashrc変更を適用してインポートします。

mkcdir fooそれからorを実行してくださいmkcdir "nested/path/in quotes"

メモ:

  • "$1"はコマンドの最初のパラメータですmkcdir。スペースやその他の特殊文字が含まれている場合、引用符はパラメータを保護します。
  • --mkdir新しいディレクトリの渡された名前が解釈されないようにするオプションで、またはで始まるディレクトリをcd作成する機会を提供します。---
  • -pUsed onはmkdirまだ存在しない場合は追加のディレクトリを作成し、-PUsedはcdシンボリックリンクを確認します。
  • source-ing rcの代わりにターミナルエミュレータ/シェルを再起動することもできます。

答え3

Bash(単語表示を使用):

/tmp/bug$ mkdir "some dir"
/tmp/bug$ cd !$
cd "some dir"
/tmp/bug/some dir$ 

!$履歴から前の行の最後のパラメータに展開されます。中間にパラメータがある場合は、!:1最初のパラメータ、!:22番目のパラメータなどに使用できます。

Bash(1)から:

イベントインジケータ

イベントインジケータは、履歴リストのコマンドラインエントリへの参照です。参照が絶対的でない場合、イベントは履歴リストの現在の場所に基づいています。

! 後にスペース、改行、キャリッジリターン、または=(組み込みのshoptを使用してextglobシェルオプションが有効になっている場合)がない場合は、履歴の交換を開始します。

[..]

単語インジケーター

単語インジケータは、イベントから目的の単語を選択するために使用されます。:イベント仕様とワード指定子はAで区切られます。 [..]

[..]
NこれN- 最初の単語。
^ 最初の主張。 1番の言葉です。
$ 最後の言葉。これは通常最後の引数ですが、行に単語が1つしかない場合は0番目の単語に展開されます。

答え4

人生を複雑にする他の若者は次のとおりです。

eval {mkdir,cd}\ FOLDER\;

関連情報