我有一个有点复杂的 bash 命令,它包含一些管道和一个 if-then-else 子句,更不用说grep使用多个参数调用系统程序(例如)。
有没有办法创建一个 plist,launchd 将直接加载和运行这个复杂的命令?(与让 plist 引用包含复杂命令的 bash 脚本文件相反)
谢谢。
我有很多自定义键盘快捷键,将迁移 Mac。我测试了迁移助手,但似乎没有得到这些。
我在某处读到它们存储在文件~/Library/Application Support夹中的单个应用程序的 plist 文件中,但即使在通过快捷方式复制了这些文件夹中的一些之后似乎也没有遵循。
如何将所有键盘快捷键迁移到新 Mac?
keyboard-shortcuts plist system-preferences osx-mountain-lion osx-mavericks
我有一个 plist 文件,我对使用 shell 脚本从嵌套字典中获取值很感兴趣。这是我的 plist 文件的结构:
<dict>
<key>Countries</key>
<dict>
<key>USA</key>
<dict>
<key>Capital</key>
<string>Washington DC</string>
<key>Continent</key>
<string>North America</string>
</dict>
<key>Italy</key>
<dict>
<key>Capital</key>
<string>Rome</string>
<key>Continent</key>
<string>Europe</string>
</dict>
</dict>
</dict>
Run Code Online (Sandbox Code Playgroud)
如果用户提供国家/地区名称,我有兴趣获取分配给“Capital”键的值。
例如,如果我执行以下命令,我会在“国家/地区”字典下获得完整的数据。
defaults read "/Users/sameerp/Downloads/data" Countries 2>&1
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
{
Italy = {
Capital = Rome;
Continent = Europe;
};
USA = {
Capital = "Washington DC";
Continent = "North America";
};
}
Run Code Online (Sandbox Code Playgroud)
如何修改上面的命令以将“国家”键(例如美国)传递给它并获取“资本”键的值?
在 Mac OSX 中,有属性列表文件 (.plist)。您可以使用 Xcode 修改它们。
给定一个 .plist 文件,是否有像 Xcode 在 Windows 7 中那样修改它们的合理方法?
我找到了http://www.icopybot.com/plist-editor.htm,但它似乎没有正确解析文件(对于初学者来说,数组中的每个条目都没有与索引号一起出现 - 它是空白,当它应该是 0, 1, 2, ...)。另外,无论如何都很难编辑条目。
当然我可以只使用 Notepad++ 并修改代码,但我更喜欢像 Xcode 这样的可视化编辑器。
我的 .plist 如下所示......在 /var/log.system.log 我可以看到
(com.example.exampled[24728]): posix_spawn("/usr/local/bin/ruby /Users/radek/Sites/sinatrasvn/web.rb", ...): No such file or directory
(com.example.exampled[24728]): Exited with exit code: 1
(com.example.exampled): Throttling respawn: Will start in 10 seconds
Run Code Online (Sandbox Code Playgroud)
但如果我运行/usr/local/bin/ruby /Users/radek/Sites/sinatrasvn/web.rb脚本工作正常。任何的想法?
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example.exampled</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/ruby /Users/radek/Sites/sinatrasvn/web.rb</string>
</array>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud) 我正在 Mac 上为QuickCursor应用程序编辑 plist 文件。我想尝试将 Aquamacs 添加到可用的编辑应用程序列表中。在任何情况下,plist 中列出的所有其他编辑器都使用类似于com.developer.application. 例如:
BBEdit => com.barebones.bbedit
MacVim => org.vim.MacVim
Smultron => org.smultron.Smultron
Run Code Online (Sandbox Code Playgroud)
我注意到我的 Android 手机上的所有“进程”或“应用程序”都遵循类似的命名方案。那我到底怎么称呼这些东西呢?反向URI?
更符合我的目的,我如何找到任意 Mac 应用程序的“反向 URI”?(如果这是最简单的方法,我很乐意使用终端。)
请随意用更好的标签标记它,以便其他人将来可以找到它。
我有一个.plist结构如下的文件:
<plist version="1.0">
<array>
<dict>
<key>BundleIsVersionChecked</key>
<false/>
<key>BundleIsRelocatable</key>
<false/>
<key>BundleHasStrictIdentifier</key>
<false/>
<key>RootRelativeBundlePath</key>
<string>value</string>
</dict>
</array>
</plist>
Run Code Online (Sandbox Code Playgroud)
RootRelativeBundlePath我想使用命令添加或编辑-key defaults write。另一种可能性是编写整个 plist 文件,但它必须具有相同的精确结构。
我怎样才能做到这一点?
我已经阅读了 plist 和 launchd.plist 的手册页,以及有关使用 plist 文件在登录时运行脚本的帖子;但我似乎可以让事情运转起来。
我的脚本位置和权限:
sshfs_mounts.sh:
ls -al Library/scripts/
-rwxr-xr-x 1 jason staff 288 May 10 17:06 sshfs_mounts.sh
Run Code Online (Sandbox Code Playgroud)
cat Library/scripts/sshfs_mounts.sh
#!/bin/bash
#
## automounting of sshfs directories
mount_cosmic ()
{
/usr/local/bin/sshfs jason@iss.nasa.gov:/media/NetworkShare/spacedock-1 /Users/jason/share;
}
mount |grep "/Users/jason/share/"
if [ $? == 1 ] && [ -d "/Users/jason/share" ] && [ $USER == "jason" ]; then
mount_cosmic
fi
Run Code Online (Sandbox Code Playgroud)
从原始帖子编辑:
如果我手动运行脚本,它会按预期执行。我可以加载 plist ( launchctl load ~/Library/LaunchAgents/local.sshfs.plist) 并启动它 ( launchctl start ~/Library/LaunchAgents/local.sshfs),但它不运行脚本。在日志 ( cat /var/log/system.log |grep local.sshfs …
plist ×9
macos ×7
bash ×2
launchd ×2
mac ×2
dictionary ×1
java ×1
launchctl ×1
shell-script ×1
windows-7 ×1