从本地 bash 脚本文件夹中编辑 plist



我正在尝试使用脚本编辑plist,该脚本决定了运行脚本的本地文件夹。我遇到的是一个空白的清单。Objective-C 环绕也是一种选择,但我没有从中获得对 plist 的预期编辑。

当单独运行时,它按预期工作,最后没有第二个 sed pipe 命令,并从在 shell 中运行脚本然后添加它传递它。

整个猫 MyPlist.plist 等行在从 shell 单独运行时按预期工作。

输出:无,它只是运行

这是我的脚本:

#!/bin/sh    
# scriptname is the full path of the script location.
scriptpath=`echo $scriptname | sed 's/MyScript.sh///g'`
cd $scriptpath
cd ..
cat MyPlist.plist | sed 's/</dict>/<key>My Plist Setting</key><string>1</string></dict>/g' > MyPlist.plist;
而不是sed

建议使用 PlistBuddy 来修改属性列表文件,哪个不太容易出错:

/usr/libexec/PlistBuddy -c "Set :KEY VALUE" /path/to/plistfile

您可以使用dirname,这要容易得多并且对我有用。

这样称呼它:
scriptpath="$(dirname $0)"

或者另一种选择是这样的:
scriptpath="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

cat MyPlist.plist | sed 's/</dict>/<key>My Plist Setting</key><string>1</string></dict>/g' > MyPlist.plist;

对我来说似乎不可靠。在 shell 打开同一文件以进行 sed 命令的重定向输出之前,cat子进程是否已打开预先存在的 MyPlist.plist 文件存在争用条件。外壳可能会用O_TRUNC打开它,以丢弃其现有内容并从头开始。这可能会在cat阅读之前发生。(管道两侧的命令('|")同时运行,而不是串行运行。

应临时使用第二个文件,如果命令成功,则用结果替换原始文件。

最新更新