readlink:非法选项--xcode中的f错误

xjreopfe  于 2023-06-24  发布在  其他
关注(0)|答案(2)|浏览(224)

bounty已结束。此问题的答案有资格获得+50声望奖励。赏金宽限期20小时后结束。Terminator希望引起更多关注这个问题。

我读了链接:非法的选项-- f错误当我试图使用产品->存档在xcode..
我试图从source="$(readlink -f“${source}”)中删除“-f”标记...并得到Rsync错误:某些文件无法传输(代码23)
我试图添加这个代码到podfile,但它不工作

post_install do |installer|
  installer.pods_project.targets.each do |target|
    shell_script_path = "Pods/Target Support Files/#{target.name}/#{target.name}-frameworks.sh"
    if File::exists?(shell_script_path)
      shell_script_input_lines = File.readlines(shell_script_path)
      shell_script_output_lines = shell_script_input_lines.map { |line| line.sub("source=\"$(readlink \"${source}\")\"", "source=\"$(readlink -f \"${source}\")\"") }
      File.open(shell_script_path, 'w') do |f|
        shell_script_output_lines.each do |line|
          f.write line
        end
      end
    end
  end

**注意:**我使用的是mac m1,应用程序在模拟器上运行良好

cygmwpex

cygmwpex1#

您使用的是旧版本的macOS。
命令在我的系统上运行正常:

# sw_vers 
ProductName:        macOS
ProductVersion:     13.4
BuildVersion:       22F66

# which readlink
/usr/bin/readlink

# ln -s /System FakeLink 
# readlink -f FakeLink
/System

您可以尝试将脚本更改为使用显式路径/usr/bin/readlink,以防您选择了一些名为readlink的意外脚本。
或者,您可以安装GNU readlink并使用它

brew install coreutils
ln -s /usr/local/bin/greadlink /usr/bin/readlink
58wvjzkj

58wvjzkj2#

您遇到的问题是因为macOS上的readlink命令不像Linux上那样支持-f选项。Linux上的-f选项用于通过解析所有符号链接来提供规范的绝对名称。
通过使用readlinkrealpath的组合,可以在macOS上实现类似的效果。在这种情况下,您需要将readlink -f替换为macOS中的等效命令,即readlinkrealpath的组合。
尝试以以下方式更改您的脚本:
替换:

source="$(readlink -f "${source}")"

有:

source="$(realpath "$(readlink "${source}")")"

但是,请注意,realpath默认情况下并非适用于所有版本的macOS。如果您的机器上没有它,您可以使用Homebrew通过运行brew install coreutils来安装它。安装coreutils后,您可以使用grealpath作为realpath的替代品。
所以更新的行将是:

source="$(grealpath "$(readlink "${source}")")"

关于Podfile代码,您也需要进行类似的调整。用等效命令替换-f选项。希望这有助于解决您的问题。

相关问题