
次のように入力して、端末でディレクトリを変更する方法を知っています。
cd <directory>
しかし、ここにシーンがあります。私は端末を使用して私のgitリポジトリのフォルダにアクセスしています。
- グレンストア
- Glenn-remdroid-ストア
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
コマンドラインの末尾にを作成すると、コマンドパイプライン&
(この場合は単一のコマンド)を取得し(結果を待たずに)バックグラウンドのサブシェルで実行するようにシェルに指示します。cd
bashが組み込まれていますが、ここでは重要ではありません。どのような方法でも「親」シェルに影響を与えないため、作業ディレクトリは変更されません。
[1] 7519
この行は、バックグラウンドで実行されているジョブ(番号1、プロセスID 7519)があることを報告します。たとえば、実行しvim
てCtrl+を押して一時Z停止すると、次の内容が印刷されます。プロセスが完了すると、シェルは次の処理サイクル(Return再度ヒット)まで報告せず、更新されたジョブ完了リストを印刷します。
詳細については、およびman bash
セクションを読んでくださいJOB CONTROL
。
ちなみに、この質問はなぜexit &
動作しないのですか?いくつかの類似点があります。
答え2
オペレータは&
プロセスをcd
引数なしで実行できるため、プロセスをバックグラウンドで送信します。マニュアルページを見ると:
名前
cd - シェル作業ディレクトリを変更します。
要約
cd
[ |-L
-P
目次]説明する
シェル作業ディレクトリを変更します。
現在のディレクトリを次に変更します。目次。基本目次シェル変数の値です
HOME
。この変数は、以下
CDPATH
を含むディレクトリの検索パスを定義します。 目次。の代替ディレクトリ名はCDPATH
コロン(:)で区切ります。
空のディレクトリは現在のディレクトリと同じ名前です。もし目次スラッシュ(/
)で始まり、未CDPATH
使用のままにしてください。ディレクトリが見つからず、シェルオプションが設定されている場合、
cdable_vars
この単語は変数名と見なされます。変数に値がある場合、その値は次の目的で使用されます。目次。オプション:
-L
-P
シンボリックリンクに従わずに物理ディレクトリ構造を使用するには、シンボリックリンクを強制します。デフォルトは、指定されたとおりにシンボリックリンクに従うことです
-L
。終了ステータス:
ディレクトリが変更された場合は0を返し、それ以外の場合は0以外の値を返します。
また、見ることができます
bash
(1)実装する
GNU bash, バージョン 4.1.5(1)-リリース (i486-pc-linux-gnu)
著作権 (C) 2009 Free Software Foundation, Inc.
ライセンスGPLv3+:GNU GPLバージョン3以降
パラメーターがオプションであることがわかります。だから
cd &
処理された
cd
後、バックグラウンドに送信されます。パラメータなしで呼び出されると、cd
処理は不要です。したがって、「完了」(処理済み)状態でバックグラウンドに移動します。
&
Bash(アンパサンド)に関する情報は、&
フォークプロセスのための組み込み制御演算子です。 Bashのマニュアルページで、「コマンドが制御演算子によって終了すると、シェル&
はサブシェルのバックグラウンドでコマンドを実行します」。
対話型シェルにログインすると、プロセスにタスク番号が割り当てられ、子プロセス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$