3

Cygwinのbashは、多くの場合、Windowsのcmdコマンドシェルよりも望ましいため、Windowsシェルを生成する前に環境をセットアップするために使用します。ただし、 Ctrl-Cを使用してこの生成されたシェルで実行中のプロセスの実行を停止すると、ユーザーはbashシェルに戻ります。

私が試みた回避策:

source setupEnvironment.sh

restartCommand() {
  # Reset trap
  trap restartCommand SIGINT
  echo -e " === Restarting windows cmd prompt\n"
  cmd /k 
}

trap restartCommand SIGINT
echo -e " === Starting windows cmd prompt\n"
cmd /k

このアプローチでは、cmdを1回だけ再起動します。後続のCtrl-Cはキャッチされません。cmdプロセスを再起動し続ける方法はありますか?

4

3 に答える 3

2

同じウィンドウにある必要がありますか?そうでなければ、私ははるかに幸運に恵まれました

cygstart cmd

cmd独自のウィンドウで開始します。終了するだけでそのウィンドウが閉じます

于 2013-01-30T22:40:40.717 に答える
1

後続のCtrl-Cは、スクリプトが最後に到達したために終了するため、キャッチされません。

ctrl-cを実行すると、cmdがエラーを返す可能性があります。その場合は次のように実行できます。

until cmd /k; do true; done

それ以外の場合は、ctrl-cが押されなくなるまで、スクリプトをループさせます。

trap restart=1 SIGINT
echo -e " === Starting windows cmd prompt\n"
restart=1
while (( restart )); do restart=0; cmd /k; done
于 2013-01-30T21:32:53.393 に答える
1

Miserable Variableの役立つ回答独自のコンソールウィンドウで開くことが最善のアプローチである理由の説明で補足する には:cmd.exe

  • 他の人の答えCtrl-Cに示されているように問題を回避することはできますが、動作は通常のコンソールウィンドウの場合とまったく同じではありません。押すたびに新しいインスタンスが作成されるため、以前の状態は失われます。cmd.execmd.exeCtrl-C

  • Cygwinターミナル(コンソールウィンドウ)は、(レガシー)OEMコードページに基づく通常のコンソールウィンドウのエンコーディングではなく、UTF-8文字エンコーディングを使用しており、この2つには互換性がありません。

  • 不思議なことに、Cygwinターミナルにとどまると、インタラクティブに送信されたすべてのコマンドcmd.exeエコーされます(なしでバッチファイルを取得する場合と同様@echo off)。

cmd.exeコンソールウィンドウの起動時にCygwinウィンドウを自動的に閉じるには、を使用します
exec cygstart cmd

于 2017-04-04T22:18:50.643 に答える