2

我正在尝试使用 ruby​​ shell 执行显示连接到 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 匹配之前在 shell 中运行命令并显示输出?

4

1 回答 1

1

您正在运行的命令似乎总是返回状态码1而不是0,即使直接运行它也是如此。完成后运行检查echo $?

如果确实是这种情况并且是预期或想要的,那么您必须让 fastlanesh接受这一点。您可以通过提供sh一个error_callback参数来做到这一点,如果状态为 1,它将被执行。它实际上不需要做任何事情,所以一个空方法应该没问题。

(这背后的内部逻辑和代码在这里- 注意错误消息是如何输出的,UI.shell_error!当没有回调存在时停止执行,但当回调存在时UI.error只输出红色错误消息。

于 2018-12-07T10:59:41.783 回答