一重引用符文字を含むSMSテキスト転送の問題 - mmcli(ModemManager)

一重引用符文字を含むSMSテキスト転送の問題 - mmcli(ModemManager)

マンページの例は次のとおりですmmcli

mmcli -m 0 --messaging-create-sms="text='Hello world',number='+1234567890'"

解析方法の詳細は不明であり、説明には既知のキーのみが記載され、リストされています--messaging-create-sms=['KEY1=VALUE1,...']。キー値はtextUTF-8メッセージテキストです。

私のスクリプトの対応する行は次のとおりです。

mmcli -m $modem --messaging-create-sms="text='$msg',number='$num'"

問題は、メッセージに一重引用符を含めることができないことです。エラーは次のとおりです。

'GDBus.Error:org.freedesktop.ModemManager1.Error.Message.InvalidPduParameter: メッセージ テキストを GSM に変換できません。

現在は二重引用符で置き換えています。私は成功せずにバックスラッシュ脱出を試みました。助けを求めてもいいですか?

答え1

おそらく解析を実行するコードはここ:

/* Expecting input as:
 *   key1=string,key2=true,key3=false...
 * Strings may also be passed enclosed between double or single quotes, like:
 *   key1="this is a string", key2='and so is this' */
gboolean mm_common_parse_key_value_string(...)

したがって、テキストに二重引用符と一重引用符がない場合は、パラメータに逆引用符を使用できます。たとえば、次のようになります。

case "$msg" in
*\'*\"*|*\"*\'*) echo oops; exit 1 ;;
*\'*)   q=\" ;;
*\"*)   q=\' ;;
esac

... --messaging-create-sms="text=$q$msg$q,number='$num'"

答え2

少し遅れましたが、最近でも同じ問題が発生しました。現在の文字列解析では、不可能な一重引用符と二重引用符を含む可能性があるメッセージをサポートする必要があります。私の考えでは、自分で直してリポジトリをフォークする必要があると思います。ここ--messaging-create-sms-with-textそして、ファイル(標準入力かもしれません)からメッセージテキストを読むことができるコマンドラインオプションを追加しました。このオプションも同様に機能します--messaging-create-sms-with-data

プルリクエストを完了しましたが、プロジェクトがあまりアクティブではないようです(最後のコミットは2021年11月4日でした)。置いてみましょう。

編集:このプロジェクトは以下でホストされています。FreeDesktopの独自のgitlab。私はそれがGitHubにあると仮定します。私のせい:)

私の変更それ以来受け入れられました。

関連情報