在我的Info.plist
文件中,我想修改shell上的Plist文件,如下所示:
<plist version="1.0">
<dict>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>urlname-1</string>
</dict>
</array>
</dict>
</plist>
现在我想使用PlistBuddy使其看起来像这样,使用字符串数组值(或其他所有值)添加CFBundleURLSchemes
键:
<plist version="1.0">
<dict>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>urlname-1</string>
<key>CFBundleURLSchemes</key>
<array>
<string>urlscheme-1</string>
</array>
</dict>
</array>
</dict>
</plist>
如何使用PlistBuddy实现这一目标?
假设CFBundleURLTypes
的数组值为空:
通过执行/usr/libexec/PlistBuddy -c "Add :CFBundleURLTypes:0:CFBundleURLName string 'urlname-1'" Info.plist
,我可以将字典添加到数组中,包括它的第一个键/值对:
<plist version="1.0">
<dict>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>urlname-1</string>
</dict>
</array>
</dict>
</plist>
但我不知道如何将第二个密钥,例如CFBundleURLSchemes
带有字符串数组值放入同一个字典中。
任何人都可以给我指针吗?这对PlistBuddy来说有可能吗?
答案 0 :(得分:3)
不确定这是否是您期望的命令......
/usr/libexec/PlistBuddy -c "clear dict" -c "add :CFBundleURLTypes array" -c "add :CFBundleURLTypes:0 dict" -c "add :CFBundleURLTypes:0:CFBundleURLName string 'urlname-1'" -c "add :CFBundleURLTypes:0:CFBundleURLSchemes array" -c "add :CFBundleURLTypes:0:CFBundleURLSchemes:0 string urlscheme-1" Info.plist
答案 1 :(得分:2)
可以添加,PlistBuddy
很棘手但是一旦你得到,它就会很容易,你可以使用plistbuddy添加如下...
下面添加字典并设置键值对,听取"${10}"
是plist的路径
/usr/libexec/PlistBuddy -c "Add :CFBundleURLTypes:0:CFBundleURLName string urlname-1" "${10}"
/usr/libexec/PlistBuddy -c "Add :CFBundleURLTypes:0:CFBundleURLSchemes array" "${10}"
/usr/libexec/PlistBuddy -c "Add :CFBundleURLTypes:0:CFBundleURLSchemes:0 string aSchemeName" "${10}"
如果你想再添加一个字典,请加入
/usr/libexec/PlistBuddy -c "Add :CFBundleURLTypes:1:CFBundleTypeRole string Viewer" "${10}"
/usr/libexec/PlistBuddy -c "Add :CFBundleURLTypes:1:CFBundleURLName string url_type_1" "${10}"
/usr/libexec/PlistBuddy -c "Add :CFBundleURLTypes:1:CFBundleURLSchemes array" "${10}"
/usr/libexec/PlistBuddy -c "Add :CFBundleURLTypes:1:CFBundleURLSchemes: string scheme_2" "${10}"
最后plist将如下所示
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>urlname-1</string>
<key>CFBundleURLSchemes</key>
<array>
<string>aSchemeName</string>
</array>
</dict>
<dict>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>CFBundleURLName</key>
<string>url_type_1</string>
<key>CFBundleURLSchemes</key>
<array>
<string>scheme_2</string>
</array>
</dict>
答案 2 :(得分:0)
除非另有证明,否则我认为用plistbuddy无法实现我想要的目标。
我最终使用theano
来修改我的plist,它确实有效:
C = T.cos
S = T.sin
q = T.fscalar(name="q%d"%self.i)
names = ['x','y','z']
Sx,Sy,Sz = map(lambda name: T.fscalar(name=name),names)
self.mat = np.array([[C(q),-S(q)*C(alpha),S(q)*S(alpha),a*C(q)+Sx],
[S(q),C(q)*C(alpha),-C(q)*S(alpha),a*S(q)+Sy],
[0,S(alpha),C(alpha),d+Sz],
[0,0,0,1]])