oneコマンドだけを検索しています— &&
または|
—ディレクトリを作成し、すぐに現在のディレクトリを新しく作成したディレクトリに変更します。 (これは誰かが彼の "linux-usage"の試験のために得た質問です、彼はそれをする新しいコマンドを作りました、しかしそれは彼にポイントを与えませんでした。)それが重要なら、これはdebianサーバー上にあります。
私はあなたがこれを探していると信じています:
mkdir project1 && cd "$_"
_$HOME/.bashrc
_でその目的のためにbash functionを定義します。
_ function mkdcd () {
mkdir "$1" && cd "$1"
}
_
次に、インタラクティブシェルに_mkdcd foodir
_と入力します
厳密な意味で、いくつかの_&&
_(または少なくとも_;
_)を含むShell関数なしでは、達成したいことは不可能です...その他つまり、演習の目的は、シェルで関数(またはエイリアス)が役立つ理由を理解させることでした。
PSスクリプトではなく関数である必要があります(スクリプトの場合、cd
は、スクリプトを実行している[サブ]シェルにのみ影響し、インタラクティブな親シェルには影響しません)。呼び出しているインタラクティブな親シェルのディレクトリを変更する単一のコマンドまたは実行可能ファイル(シェル関数ではない)を作成することは不可能です(各プロセスには独自の現在のディレクトリがあり、自分のプロセスの現在のディレクトリしか変更できないため、呼び出し元のシェルプロセスではありません)。
PPS。 Posixシェルでは、function
keywordを削除し、最初の行をmkdcd() {
にする必要があります
oh-my-zshユーザーの場合:take 'directory_name'
参照: 公式oh-my-zsh github wiki
以下を.bash_profile(または同等のもの)に入力すると、必要な機能を実行するmkcd
コマンドが得られます。
# mkdir, cd into it
mkcd () {
mkdir -p "$*"
cd "$*"
}
この記事 はそれをより詳細に説明しています
これは可能ではないと思いますが、自分でスクリプトを作成する必要のない、(私が知っている)それを行う最も簡単な方法は何だろうと思っているすべての人にとっては、次のとおりです。
mkdir /myNewDir/
cd !$
これにより、新しいディレクトリの名前を2回書き込む必要がなくなります。
!$
は、最後のコマンド($
)の最後の(!
)引数を取得します。
(!!
、!*
、!startOfACommandInHistory
などの便利なショートカットがあります。詳細については、ネットで検索してください)
残念ながら、mkdir /myNewDir/ && cd !$
は機能しません。mkdir
コマンドの最後の引数ではなく、前のコマンドの最後の引数を取得します。
多分私は質問を完全に理解していませんが、
>mkdir temp ; cd temp
一時ディレクトリを作成し、そのディレクトリに移動します。
自分でディレクトリに名前を付けるかどうかは言いませんでした。
cd `mktemp -d`
一時ディレクトリを作成し、そこに移動します。
mkdir temp ; cd temp ; mv ../temp ../myname
次のようにエイリアスできます:
alias mkcd 'mkdir temp ; cd temp ; mv ../temp ../'