从命令行快速主运行/构建

标签 swift import command-line compiler-errors

我将在 Swift 中构建一个 CLI 工具。我用这个命令创建了项目 swift package init --type executable当我构建我的项目并解析 时读取别名 Xcode 中的参数并单击“播放”按钮一切正常。
Play Button
我定义了读取别名参数
parameter
然后我收到正确的输出如下,别名 来自我的 .zsh 文件

These are your Aliases
zshconfig="mate ~/.zshrc"
ohmyzsh="mate ~/.oh-my-zsh"
python="/usr/local/bin/python3.7"
python2="/usr/bin/python2"
Program ended with exit code: 0
但是当我运行以下命令时 swift run在命令行中我的项目中
然后我收到 start from command line
到目前为止,这似乎有效,这些是来自我的工具的消息。
当我像这样解析相同的参数时
 $ swift run read-aliases
我明白了 错误
error: no executable product named 'read-aliases'
这是我的代码
import Foundation
import ArgumentParser

struct Alias: ParsableCommand {
    static let configuration = CommandConfiguration(
        abstract: "Make Editing Your .zshrc Much Easier",
        subcommands: [readAliases.self])
}
extension Alias {
    struct readAliases: ParsableCommand {
        static let configuration = CommandConfiguration(
            abstract: "Reads All The Aliases In Your .zshrc File")
        
        func run() {

            print("These are your Aliases");
            readFile(path: "/Users/alexanderhess/.zshrc")
           }
            func readFile(path: String) -> Int {
                errno = 0
                if freopen(path, "r", stdin) == nil {
                    perror(path)
                    return 1
                }
                while let line = readLine() {
                    if(line.starts(with: "# alias")){
                        print(line.dropFirst(8));
                    }
                }
                return 0
            }
    }
}
Alias.main();
我的 Package.swift
// swift-tools-version:5.3
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: "easy-aliaser",
    dependencies: [
        // Dependencies declare other packages that this package depends on.
        // .package(url: /* package url */, from: "1.0.0"),
         .package(url: "https://github.com/apple/swift-argument-parser", from: "0.2.0"),
    ],
    targets: [
        // Targets are the basic building blocks of a package. A target can define a module or a test suite.
        // Targets can depend on other targets in this package, and on products in packages this package depends on.
        .target(
            name: "easy-aliaser",
            dependencies: [
                .product(name: "ArgumentParser", package: "swift-argument-parser")
            ]),
        .testTarget(
            name: "easy-aliaserTests",
            dependencies: ["easy-aliaser"]),
    ]
)
这是我的 github repository如果您想重现它。
那么为什么我在命令行中收到这个错误,但在 Xcode 中没有?
提前致谢。

最佳答案

问题
命令行指定子命令但漏掉了可执行产品$ swift run read-aliases解决方案
您必须使用 可执行产品在子命令之前swift run easy-aliaser read-aliases重现步骤

[so-test]$ git clone https://github.com/CreaTorAleXander/easy-aliaser
Cloning into 'easy-aliaser'...
remote: Enumerating objects: 41, done.
remote: Counting objects: 100% (41/41), done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 41 (delta 2), reused 38 (delta 1), pack-reused 0
Unpacking objects: 100% (41/41), done.
[so-test]$ cd easy-aliaser 

#
# [easy-aliaser (main)]$ swift package generate-xcodeproj
# edited the wired filename in your code just to refer to an existing file
# run the project in XCode without problems  
# back to the command line 
#

[easy-aliaser (main)]$ swift run easy-aliaser read-aliases
Fetching https://github.com/apple/swift-argument-parser
Cloning https://github.com/apple/swift-argument-parser
Resolving https://github.com/apple/swift-argument-parser at 0.3.1
/Users/me/projects/so-test/easy-aliaser/Sources/easy-aliaser/main.swift:23:13: warning: result of call to 'readFile(path:)' is unused
            readFile(path: "/Users/me/projects/so-test/65203567/myzshrc")
            ^       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[3/3] Linking easy-aliaser
These are your Aliases
who_listening='sudo lsof -nP -iTCP -sTCP:LISTEN'
du-docker="du -h ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2 && docker images"
du-openshift=" /Users/ronda/.docker/machine/machines/openshift/disk.vmdk && du -h ~/.docker/machine/machines/openshift/boot2docker.iso"

关于从命令行快速主运行/构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65203567/

相关文章:

c# - 通过 C# DLL 导入 MapPoint 时遇到问题

python - 跨模块变量

c++ - 尝试将 gz 文件提供给 C++ 程序

ios - 如何在 Swift 中创建类似电子表格的表格?

ios - 无法将类型 'RequestRetrier?' 的值分配给类型 'RequestRetrier?'

ios - swift 4 : UITableView dataSource isn't working

python - `cimport` 导致交互式 Python 解释器出错

linux - bash 中的参数检查未正确测试

linux - 使用 sed 显示 C 风格注释和 C++ 注释

ios - 在 MVC 中获取和解析功能位置