LinuxでCMD / Kと同じものは何ですか?

LinuxでCMD / Kと同じものは何ですか?

修正するエラーがある場合は、終了後も開いたままにする必要がある.desktopビルドスクリプトがあります。 Windowsでは、cmd /k script.bat終了後もcmdウィンドウを開いたままにする/ kを実行します。

Linuxでは、私の解決策は、「コンパイル」コマンドと最後に「bash」コマンドを含むbashスクリプトを作成することでした。 .desktopファイルは、bashコマンドのおかげで完了した後も開いているスクリプトを呼び出します。

単一のファイルでこれを行う方法はありますか?その場合は、単一のコマンド(bashのコマンドライン引数など)で次のいずれかを実行する必要があります。

  • 始める前にbashにコマンドを実行させます(Windowsのcmd / kコマンドと同じ)。

  • 特定のディレクトリでbashを起動します(そのディレクトリが開かれたときにトリガされるようにコンパイルを設定できます)。

  • コマンドを実行した後、.desktopファイルを開いたままにします(エラーがある場合は修正するには2番目のウィンドウを開く必要があるため、これは最も推奨されません)。

これらのいずれかが可能かどうか教えてください。

答え1

私は方法を見つけた。一部のStackexchangeサイトから入手しましたが、見つかりませんでした。

とにかくbashの--init-fileオプションを乱用する可能性があります。 .bashrcの代わりに別の起動スクリプトでオーバーライドすることを意図していますが、そこには何でも入れることができます。匿名パイプと組み合わせると、次のことができます。

bash --init-file <(echo "your --command --here")

コマンドが終了するとbashに戻ります。他のソリューションと同じ新しいbashインスタンスではなく、同じインスタンスです。

もちろんこれが目的なので、.bashrcをスキップします--init-file。この問題を解決するにはとてもフレンドリーになります。

bash --init-file <(echo ". \"$HOME/.bashrc\"; your --command --here")

醜いが動作します:-)

Linux用Windowsサブシステム

最後に、Windowsでこれを試しましたが、問題が発生しました。スタート bashLinux用のWindowsサブシステムを呼び出すにはまだWindows環境にあるため、匿名パイプが機能せず、$ HOMEが正しくありません。私の「cmd / k、しかしLinux用のWindowsサブシステムを起動している場合」回避策は次のとおりです。

bash -c 'exec bash --init-file ^<(echo ". \"$HOME/.bashrc\"; your --command --here")'

^エスケープ文字に注意してください<。これはbash(bash -c)を開始し、exec現在のbashプロセスを新しいbashプロセス()にすぐに置き換えます。このプロセスは、前述のように、Linux内で初期化されるbashプロセスでもあります。

bash-k.cmd次の内容で簡単に呼び出せるように、PATHから呼び出されるバッチファイルを作成しました。

@bash -c 'exec bash --init-file ^<(echo ". \"$HOME/.bashrc\"; %*")'

私ができるようにして、bash-k cowsay hello仕事がうまくいくでしょう。

答え2

@skrebbel ありがとうございます。これは非常に便利なコマンドです。ここにBash Console Here右クリックしてコンテキストメニューを追加する.regファイルコードがあります。Linux用Windowsサブシステム

context.regを追加:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\Background\shell\BashConsoleHere]
@="Bash Console Here"
"Icon"=hex(2):25,00,4c,00,4f,00,43,00,41,00,4c,00,41,00,50,00,50,00,44,00,41,\
  00,54,00,41,00,25,00,5c,00,6c,00,78,00,73,00,73,00,5c,00,62,00,61,00,73,00,\
  68,00,2e,00,69,00,63,00,6f,00,00,00

[HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\Background\shell\BashConsoleHere\command]
@="bash -c 'exec bash --init-file <(echo \". \"$HOME/.bashrc\"\")'"

[HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\shell\BashConsoleHere]
@="Bash Console Here"
"Icon"=hex(2):25,00,4c,00,4f,00,43,00,41,00,4c,00,41,00,50,00,50,00,44,00,41,\
  00,54,00,41,00,25,00,5c,00,6c,00,78,00,73,00,73,00,5c,00,62,00,61,00,73,00,\
  68,00,2e,00,69,00,63,00,6f,00,00,00

[HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\shell\BashConsoleHere\command]
@="bash -c 'exec bash --init-file <(echo \". \"$HOME/.bashrc\"\")'"

[HKEY_CLASSES_ROOT\Drive\shell\BashConsoleHere]
@="Bash Console Here"
"Extended"=""
"NoWorkingDirectory"=""

[HKEY_CLASSES_ROOT\Drive\shell\BashConsoleHere\command]
@="bash -c 'exec bash --init-file <(echo \". \"$HOME/.bashrc\"\")'"

元に戻す。reg:

Windows Registry Editor Version 5.00

[-HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\Background\shell\BashConsoleHere]
@="Bash Console Here"
"Icon"=hex(2):25,00,4c,00,4f,00,43,00,41,00,4c,00,41,00,50,00,50,00,44,00,41,\
  00,54,00,41,00,25,00,5c,00,6c,00,78,00,73,00,73,00,5c,00,62,00,61,00,73,00,\
  68,00,2e,00,69,00,63,00,6f,00,00,00

[-HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\Background\shell\BashConsoleHere\command]
@="nircmd elevate cmd /c cd \"%V\" && bash.exe"

[-HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\shell\BashConsoleHere]
@="Bash Console Here"
"Icon"=hex(2):25,00,4c,00,4f,00,43,00,41,00,4c,00,41,00,50,00,50,00,44,00,41,\
  00,54,00,41,00,25,00,5c,00,6c,00,78,00,73,00,73,00,5c,00,62,00,61,00,73,00,\
  68,00,2e,00,69,00,63,00,6f,00,00,00

[-HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\shell\BashConsoleHere\command]
@="nircmd elevate cmd /c cd \"%1\" && bash.exe"

[-HKEY_CLASSES_ROOT\Drive\shell\BashConsoleHere]
@="Bash Console Here"
"Extended"=""
"NoWorkingDirectory"=""

[-HKEY_CLASSES_ROOT\Drive\shell\BashConsoleHere\command]
@="nircmd elevate cmd /c cd \"%1\" && bash.exe"

関連情報