シェルスクリプトでは、アプリケーションバンドルのInfo.plistから文字列を読み込みます。この例では、$ FILEPATHはパスですアプリケーションバンドル、例えばシェルスクリプト(macOS):plist文字列からエスケープされたUnicode文字を出力する
#!/bin/bash
PLIST=$(/usr/bin/defaults read "$FILEPATH/Contents/Info.plist")
COPYRIGHT=$(echo "$PLIST" | /usr/bin/awk -F" = " '/NSHumanReadableCopyright/{print $2}' RS=';' | /usr/bin/sed 's/^"\(.*\)"$/\1/')
echo "Copyright: $COPYRIGHT"
注:私はもちろん、容易になるだろうこれは、直接キーを読んでいませんよ。 PLIST変数に読み込まれるので、後で他のキーも読み取ることができ、defaults
コマンドを何度も使用する必要はありません。
今、出力に改行があったようCopyright: Copyright \\U00a9 1995-2015, Apple Inc.\\nAll rights reserved.
が明らかU00a9 \著作権の記号は、エスケープされたが、シェルスクリプトが実際として文字列を出力するようにどのように私はこの問題を解決することができる(例えば)でありますそれは、著作権表示と改行があることを意味しましたか?
PS:最後には改行が削除される可能性がありますが、最初のステップとして、意図したとおりにすべてをエコーしたいと思います。
I /Applications/TextEdit.app/Contents/Info.plist "を引用することを提案するかもしれません(ちょうど、他のアプリ名、または$ plist変数が存在しなかった場合)。 –
それは素晴らしいです。ありがとうございました。しかし、うまくいけないことは、JSON plutilの出力を変数に入れて、jplistとし、それをエコーしてperlコマンドに渡すことです。 'jplist = $(/ usr/bin/plutil -convert json -r -o - " $ plist ");' '著作権= $(エコー" $ jplist "|/usr/bin/perl -0777 - CSDA -MJSON :: PP -MEncode -E '$ p = decode_json(encode_utf8(<>)); $ p - > {NSHumanReadableCopyright}'); 'echo" $ copyright "' 大量に処理するので、plutil + perlは十分に速いと思われます。) – JayB
@JayB編集を参照してください。私にとっては大丈夫です。 – jm666