tou*_*ira 30 terminal keyboard-shortcuts shell-script macos
我正在尝试设置一些打开特定 iTerm 会话的键盘快捷键,我可以使用 BetterTouchTool 和一些 AppleScript 魔法来实现。问题在于 OS X 坚持为您通过 GUI 执行的任何 shell 脚本(即来自 Finder,或作为来自 BetterTouchTool 的键盘快捷键)打开一个终端窗口。如果我直接从另一个终端运行脚本,则不会出现终端窗口。
我发现的一种解决方法是将脚本包装在 .app 目录中,这解决了多余终端窗口的问题,但还有一些其他问题(例如,OS X 似乎将每个生成的 iTerm 窗口视为一个单独的应用程序,使我的 Dock 变得混乱)。(编辑:这种行为实际上是由我的脚本中的错误引起的,见下文)
我还尝试将终端应用程序分配给 Spaces 设置中的另一个虚拟桌面,试图将其移出视线,但它只会在运行脚本之前先切换到该桌面。
有没有办法完全禁用这种行为?我已经在终端首选项中找到了在脚本完成后关闭窗口的设置,但是让终端窗口弹出一秒钟仍然很烦人。
Jef*_*ffB 13
这是一个几乎不费吹灰之力的快速而肮脏的示例(对于名为“myapp”的应用程序):
制作部分应用程序层次结构:
mkdir -p ./myapp.app/Contents/MacOS
Run Code Online (Sandbox Code Playgroud)确保脚本的第一行具有所需程序的完整路径,例如,
#!/bin/bash
Run Code Online (Sandbox Code Playgroud)将您的 shell 脚本命名为“myapp”(无引号,无扩展名),赋予其执行权限,然后将其放入 MacOS 子目录中。给它执行权限:
chmod ugo+x myapp
Run Code Online (Sandbox Code Playgroud)转到 Contents 子目录并创建一个包含字符串的 PkgInfo 文件:APPL???? [字符串末尾没有行终止符!] 使用 cat(1) 实用程序创建文件:
cat > PkgInfo
APPL????
Run Code Online (Sandbox Code Playgroud)
输入字符串后(不要按回车键!),输入两个 control-D,这将关闭
没有行终止符的文件并返回到 shell 提示符。)
从查找器中双击您的新“应用程序”。它将在没有窗口的情况下运行。
如果您添加键LSUIElement并将其设置为应用程序1中的键Info.plist,则它不会在 Dock 中创建图标。
这是Info.plist我的小型 shell 脚本应用程序:
<?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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62745 次 |
| 最近记录: |