「cd&」とはどういう意味ですか?


8

入力してターミナルからディレクトリを変更する方法を知っています

cd <directory>

しかし、これがシナリオです。ターミナルを使用してgitリポジトリのフォルダーに移動していました。

  • glennRepositories
    • glenn-remdroid-repository

上記のフォルダー構造を考えると、glenn-remdroid-repositoryこれは私のリポジトリなので、切り替えたいと思います。

cd glennRepositories

glenn-remdroid-repositoryに切り替える前に、誤ってコマンドを入力しました

cd & 

の代わりにcd *cd *フォルダ名が長いので使っていましたが、ご迷惑をおかけして申し訳ありません。

を実行するcd &と、端末が応答します

[1] 7519

私が実行するとcd *これが起こります

[1]+  Done                    cd  (wd: ~/glennRepositories)
(wd now: ~/glennRepositories/glenn-remdroid-repository)

誰が何をcd &意味し、その出力はありますか?Googleは私の質問を知りません:)


1
グーグルで見つけることができないものは、スウェーデンの新造語であるogooglebarです。
クロエ

質問を入力すると、コンパクトディスクに関する検索結果が表示されました。Ungoogleable :)
GLenn 2013

3
「私はcd *を使用しました。フォルダ名が長いためです。怠惰でごめんなさい」入力するだけcd <TAB>で、一意のフォルダの名前が自動的に展開されます。
Bakuriu 2013

回答:


20

&コマンドラインの最後にを書き込むことで、シェルにコマンドパイプライン(この場合は単一のコマンド)を取得し、バックグラウンドでサブシェルで実行するように指示しています(結果を待機していません)。cdはbashビルトインですが、ここでは重要ではありません。「親」シェルに影響を与えることはないため、作業ディレクトリは変更されません。

[1] 7519

この行は、番号1で識別されるバックグラウンドで実行されているジョブがあり、プロセスIDが7519であることを報告しています。たとえばvim、実行してCtrl+ Zを押すと、同様のものが出力されます。プロセスが終了すると、シェルは次の処理サイクル(たとえばReturn、もう一度ヒットするだけ)になるまでそれを報告せず、更新リストジョブが終了したことを出力します。

詳細についてはman bash、およびセクションをお読みくださいJOB CONTROL

参考までに、なぜ機能しexit &ないのですか?いくつかの類似点があります。


ジョブの終了がすぐに報告されるか、次のプロンプトで報告されるかは、シェルによって異なります。ではfishzsh、それはすぐに報告しています。でbash、その他のPOSIXシェルまたは(T)、それはの設定に依存CSH notify((デフォルトではオフ)オプションzshPOSIXのようなシェルはまた、持っているされているnotifyオプションを、しかし、別のシェルをエミュレートするように言われていますしない限り、それはデフォルトでオフです)
ステファンシャゼラス

1

&オペレータは、バックグラウンドに処理を送ります。cdあなたがそれを実行してバックグラウンドに送信され、引数なしで実行することができます。マニュアルページを見る場合:

名前

cd-シェルの作業ディレクトリを変更します。

あらすじ

cd[ -L| -P] [ dir ]

説明

シェルの作業ディレクトリを変更します。

現在のディレクトリをDIRに変更します。デフォルトのDIRHOMEシェル変数の値です。

この変数CDPATHは、DIRを含むディレクトリの検索パスを定義します 。の代替ディレクトリ名はCDPATH、コロン(:)で区切られます。
nullのディレクトリ名は、現在のディレクトリと同じです。DIRがスラッシュ(/)で始まる場合、CDPATH使用されません。

ディレクトリが見つからず、シェルオプションcdable_varsが設定されている場合、その単語は変数名と見なされます。その変数に値がある場合、その値がDIRに使用されます。

オプション:

-Lシンボリックリンクをたどる
-Pように強制するシンボリックリンクをたどらないで物理ディレクトリ構造を使用する

デフォルトでは、-L指定された場合と同様にシンボリックリンクをたどります。

終了ステータス:

ディレクトリが変更された場合は0を返します。それ以外の場合はゼロ以外。

こちらもご覧ください

bash(1)

実装

GNU bash、バージョン4.1.5(1)-release(i486-pc-linux-gnu)
Copyright(C)2009 Free Software Foundation、Inc.
License GPLv3 +:GNU GPL version 3以降

引数はオプションです。そう

cd &として処理され cd、バックグラウンドに送信されます。cd引数なしで呼び出された場合、処理は必要ありません。したがって、「完了」(処理済み)としてバックグラウンドに移動します。

& Bash &(アンパサンド)に関するいくつかの情報は、プロセスをフォークするために使用される組み込み制御演算子です。Bashのmanページから、「コマンドが制御オペレーターによって終了された場合&、シェルはサブシェルのバックグラウンドでコマンドを実行します」。

対話型シェルにログインすると、プロセスにジョブ番号が割り当てられ、子PIDが表示されます。以下のジョブ番号は1です。

bash$ sleep 30 &
[1] 3586

プロセスがフォークされると、子PIDが特殊変数に格納されることに注意してください $!

bash$ echo $!
3586

次のように、ジョブ番号でジョブを終了できます。

bash$ jobs
[1]+ Running sleep 30 &
bash$ kill %1
[1]+ Terminated sleep 30
bash$

5
近いですが、かなりではありません。まず、cd実行されてからバックグラウンドに送信されるわけではありません。通常のコマンドの場合、バックグラウンドプロセスはプログラムが実行される前に実際に作成されます。組み込みの場合、この動作はエミュレートされます。コマンドは、このバックグラウンドプロセスによって実行され、置き換えられます。第二には、cd引数なしでない何かを:それはあなたが表示されますHOMEディレクトリ。ただし、バックグラウンドに分岐したため、この場合は効果がありません。
ウォーレンヤング

マンページの@WarrenYoungは、値が割り当てられていない場合、cdがホームディレクトリを取得することを示しています。ディレクトリの変更が成功すると、$ pwdの値を受け取りませんか?
vfbsilva 2013

1
バックグラウンド・プロセスの現在の作業ディレクトリは、フォアグラウンドのBashシェルのではなく、影響を受けます。
ウォーレンヤング
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.