我试图显示使用ruby shell execute连接到Mac的iOS设备。
system_profiler SPUSBDataType | grep -A 11 -w "iPad\|iPhone\|iPad"
在终端上,此输出很好。
如何正确转义字符并在ruby控制台中运行
但是当使用我的Fastfile的通道添加相同内容时,请注意使用'\'来转义引号。我收到非零退出错误。
desc "Register a new device"
lane :register_new_device do
UI.message("Detected device")
sh("system_profiler SPUSBDataType | grep -A 11 -w \"iPad\|iPhone\|iPad\"")
device_name = prompt(text: "Enter the device name: ")
device_udid = prompt(text: "Enter the device UDID: ")
device_hash = {}
device_hash[device_name] = device_udid
register_devices(devices: device_hash)
new_devices
end
错误:
[08:23:56]: Exit status of command 'system_profiler SPUSBDataType | grep -A 11 -w "iPad|iPhone|iPad"' was 1 instead of 0.
2018-12-07 08:23:55.602 system_profiler[21056:476660] SPUSBDevice: IOCreatePlugInInterfaceForService failed 0xe00002be
预期输出:
2018-12-07 08:27:52.170 system_profiler[21266:479375] SPUSBDevice: IOCreatePlugInInterfaceForService failed xx
iPhone:
Product ID: xx
Vendor ID: xx (Apple Inc.)
Version: xx
Serial Number: xxx
Speed: Up to 480 Mb/sec
Manufacturer: Apple Inc.
Location ID: xx / 3
Current Available (mA): xx
Current Required (mA): xx
Extra Operating Current (mA): xx
如何在用户将设备添加到Fastlane匹配之前在外壳中运行命令并显示输出?
答案 0 :(得分:0)
即使您直接运行,看来您正在运行的命令总是返回状态代码1
而不是0
。完成后运行echo $?
进行检查。
如果确实是这种情况,并且是期望或想要的,则必须使fastlane的sh
接受此要求。您可以通过给sh
一个error_callback
parameter来执行此操作,如果状态为1,则将执行该代码。它实际上不需要执行任何操作,因此可以使用空方法。
(此操作背后的内部逻辑和代码是here-请注意如何使用UI.shell_error!
输出错误消息,当不存在回调时该错误消息将停止执行,而UI.error
仅输出一个回调出现时显示红色错误消息。)