WindowsではCreateProcess(..., CREATE_NEW_CONSOLE, ...)
、子プロセス(GUIではなくコンソールアプリ)が新しいウィンドウで起動されます。これを Mac OS でエミュレートする最も簡単な方法は何ですか?
3 に答える
open -a Terminal.app $(which program)
指定されたプログラムを実行している新しい端末を取得します(bashを使用していると仮定します)。
Apple APIを知らなくても、コンパイルされたコードで同じことを達成するためexecve()
に(の後に可能)を使用できます(これを行う適切な方法があると思います...)。fork()
読んでくださいman open
。
編集:Terminal.appへのパスを指定する必要はありません(ファインダーはそれを理解できます)。
Xを実行している場合は、さらに簡単です。。を使用して新しいxtermを生成するだけxterm -e program &
です。
読んでくださいman xterm
(これには時間がかかります...)。
通常のMacプログラムでのCLIの正しい使用法(またはその欠如)について、2番目にChrisに説明します。私のビジネスではこれは予想されますが、一般的なユーザーは{混乱|怒り|不幸}になります。
ターミナル (Terminal.app、「コンソール」と呼ばれるもの) は、オペレーティング システムの機能ではなく、Mac OS X の別のユーザー レベル アプリケーションです。Mac OS X で利用可能なさまざまな API には、新しいターミナル ウィンドウ内で実行可能ファイルを起動するための直接的な方法はありません。
ただし、ターミナルで実行可能ファイルをドキュメントのように開くことができ、コード内であろうとユーザーとしてであろうと、新しいセッションで実行できると思います。ただし、これは通常の Mac OS X ユーザー エクスペリエンスではなく、エンド ユーザーに配布する予定の Mac ソフトウェアでは通常使用しないでください。
Mac OS X アプリケーションはアプリケーションです。上級ユーザーが Terminal を介して対話できるツールを提供することは問題ありませんが、Terminal は、エンド ユーザーにソフトウェアを配信する際に、実際のアプリケーションの代わりになるものではありません。
これに付け加えておきますが、Cocoa を使用している場合は、NSTaskクラスを使用して別のプロセスを簡単に開始および操作できます。
Marc Liyanage はこれを "term" でうまく処理します。osascript はアプリケーション "Terminal" に指示します
:
(「典型的なユーザー」について: さまざまな宇宙があり、それぞれが他のものを奇妙に感じています
。Unix から来た私は、ファイルを使用できる場所ならどこでもプロセスまたは「| パイプ引数」に慣れています。
これは、ソフトウェアコンポーネントを非常に助けます。
しかし、オープン-a はファイルのみを実行します -- 別の宇宙)。