mac*_*arz 2 terminal android adb
我有一个问题,涉及使用Mac OS X终端上的Activity Manager发送包含空格字符的字符串额外的意图.
以下命令:
adb shell am start -n com.example.package/.Activity -e 'KEY' 'String with spaces'
Run Code Online (Sandbox Code Playgroud)
...给:
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] pkg=with cmp=com.example.package/.Activity (has extras) }
Run Code Online (Sandbox Code Playgroud)
...并且只有"String"实际传递给Activity.
我可以通过使用反斜杠转义空格来解决这个问题:
adb shell am start -n com.example.package/.Activity -e 'KEY' 'String\ with\ spaces'
Run Code Online (Sandbox Code Playgroud)
...给:
Starting: Intent { cmp=com.example.package/.Activity (has extras) }
Run Code Online (Sandbox Code Playgroud)
...和"带空格的字符串"传递给Activity,因此它按预期工作.
问题是转义空间会限制我的脚本与Ubuntu终端的兼容性.在Ubuntu的这种情况下,"String\with\spaces"被传递给活动.
有没有办法迫使Mac OS终端解释字符串额外包含空格,如Ubuntu终端吗?
我在一个队友的帮助下弄清楚了.这是Ubuntu终端实际上有错.在第一种情况下,在将命令发送到adb shell之前,单引号会被本地shell剥离.这就是它在设备shell中执行的原因:
am start -n com.example.package/.Activity -e KEY String with spaces
Run Code Online (Sandbox Code Playgroud)
......结果是人们所期待的.
该问题的一个解决方案是将整个命令包装在应用于单引号的设备shell中,并使用双引号来包装字符串,如下所示:
adb shell 'am start -n com.example.package/.Activity -e "KEY" "String with spaces"'
Run Code Online (Sandbox Code Playgroud)
这在Ubuntu和Mac终端上都能正常工作.