特定のiTermセッションを開くためのいくつかのキーボードショートカットを設定しようとしています。これは、BetterTouchToolと少しのAppleScriptマジックで実行できました。問題は、OS Xが、GUIを介して(つまり、Finderから、またはBetterTouchToolからのキーボードショートカットとして)実行するシェルスクリプトのターミナルウィンドウを開くように要求することです。別の端末から直接スクリプトを実行すると、端末ウィンドウが表示されません。
私が見つけた回避策は、余分なターミナルウィンドウの問題を解決する.appディレクトリにスクリプトをラップすることでしたが、他のいくつかの問題があります(たとえば、OS Xは、結果の各iTermウィンドウを個別のアプリとして扱い、ドックを散らかしているようです) )。 (編集:この動作は実際にはスクリプトのバグが原因でした。以下を参照してください)
また、Spaces設定でターミナルアプリを別の仮想デスクトップに割り当てて、見えないところに移動しようとしましたが、スクリプトを実行する前に、最初にそのデスクトップに切り替えます。
この動作を完全に無効にする方法はありますか?ターミナルの設定で、スクリプトの終了後にウィンドウを閉じる設定を既に見つけましたが、ターミナルウィンドウが一瞬ポップアップするのはまだ面倒です。
以下は、ほとんど労力を費やさない、素早くて汚い例です( "myapp"という名前のアプリの場合):
部分的なアプリケーション階層を作成します。
mkdir -p ./myapp.app/Contents/MacOS
スクリプトの最初の行に、必要なプログラムへの完全なパスが含まれていることを確認してください。
#!/bin/bash
シェルスクリプトに「myapp」という名前を付け(引用符なし、拡張子なし)、実行権限を付与して、MacOSサブディレクトリに配置します。実行権限を与えるには:
chmod ugo+x myapp
Contentsサブディレクトリに移動し、文字列APPL ????を含むPkgInfoファイルを作成します。 [文字列の最後に行ターミネータなし!] cat(1)ユーティリティを使用してファイルを作成します。
cat > PkgInfo
APPL????
文字列を入力した後(returnキーを押さないでください!)、2つのcontrol-Dを入力して閉じます。
行末記号のないファイルで、シェルプロンプトに戻ります。)
Finderから新しい「アプリ」をダブルクリックします。ウィンドウなしで実行されます。
Platypus をチェックアウトすることをお勧めします。これにより、シェルスクリプトやその他の解釈されたスクリプトからMac OS Xアプリケーションが作成されます。
キーLSUIElement
を追加し、アプリの1
でInfo.plist
に設定すると、Dockにアイコンが作成されません。
これが私の小さなシェルスクリプトアプリのInfo.plist
です。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleExecutable</key>
<string>launch</string>
<key>CFBundleIconFile</key>
<string>launch</string>
<key>LSUIElement</key>
<string>1</string>
</dict>
</plist>
他の可能なトレーニングがあります。自動化ワークフローでシェルスクリプトを保護します。 launchdを使用してワークフローを呼び出します。コードは次のとおりです。
/usr/bin/automator /path/to/the/file.workflow
これはプログラムを起動せず、メニューバーに表示されません。その方法は、カモノハシアプリよりも静かです。
シェルスクリプトを実行するさらに優れた方法は、launchdで直接実行することです。
/bin/bash /path/to/shellScript.command
コマンドはバックグラウンドでウルトラサイレントで実行されます。
ここに少しの回避策があります:
シェルスクリプトを呼び出すアップルスクリプトをコンパイルします:)
osacompile -e 'do Shell script "cd ~; echo aaa > temp.txt"' -o ~/name_of_script.scpt
osacompile
は'do Shell script "XXX"'
applescriptスニペットをコンパイルします。シェルスクリプトはXXXです。
引用に注意してください。シェルスクリプトを適切に引用して、そのまま使用してコンパイルするために使用しているシェルを通過する必要があります。
しかし、これはバカバカしなくてもBetterTouchToolから実行できます。