乐趣区

关于ios:Mac上自制终端命令行程序

终端 (Shell) 上命令实质上就是可执行程序。那么如何实现本人的命令,如何让 Shell 能辨认和运行咱们本人的可执行程序呢?

运行环境

用户在 Shell 中输出一个外部命令后,只是将可执行文件的名字通知了 Shell,而后 Shell 就会去寻找这个文件并执行。

为了解决这个问题 shell 引入了一个 PATH 变量

$echo $PATH 
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

Shell 即会到 PATH 对应的目录中找寻用户输出的命令程序,当然咱们能够追加本人的可执行文件目录,也就是常说的环境变量配置

实现可执行文件

接下来用 OC 来实现一个可执行程序,首先 Xcode 创立一个 Command Line Tool

创立完失去一个洁净的 C 语言的 main 函数入口

1. 获取输出参数

首先配置 main 函数输出参数,仅在 Xcode 运行测试应用,Product-Scheme-Edit Scheme-Arguments

int main(int argc, const char * argv[]) {
    @autoreleasepool {for (int i =0; i< argc; i++) {printf("输出参数:%s\n",argv[i]);
        }
    }
    return 0;
}

失去以下输入

输出参数:/Users/niang/Library/Developer/Xcode/DerivedData/TSProj-celbcreghvkbbochdmxixomyftvb/Build/Products/Debug/MyCMD
输出参数:aaa
输出参数:bbb
Program ended with exit code: 0

由输入可得,第一个参数默认是可执行程序所在的目录

2. 终端运行测试

首先配置以后可执行文件目录到 PATH

export MY_CMD_PATH=/Users/niang/Library/Developer/Xcode/DerivedData/TSProj-celbcreghvkbbochdmxixomyftvb/Build/Products/Debug/

export PATH=$MY_CMD_PATH:$PATH

再输出咱们的程序名,疏忽大小写

第一个参数并未如之前猜想那样的是可执行文件目录,它仅仅输入一个程序名

3. 获取可执行文件目录和以后所在目录
int main(int argc, const char * argv[]) {
    @autoreleasepool {NSString *url = [NSBundle mainBundle].executableURL.absoluteString;
        url = [url stringByReplacingOccurrencesOfString:@"file://" withString:@""];
        url = [url stringByDeletingLastPathComponent];
        printf("可执行文件目录 : %s\n", url.UTF8String);
        
        //https://stackoverflow.com/questions/65702034/getcwd-vs-get-current-dir-name
        char cd_path[256];
        memset(cd_path, 0, sizeof(cd_path));
        if (getcwd(cd_path, sizeof(cd_path)) == NULL) {perror("getcwd");
            exit(EXIT_FAILURE); // or abort()}
        NSString *cdPath = [NSString stringWithUTF8String:cd_path];
        printf("shell 当前目录 : %s\n", cdPath.UTF8String);
        
    }
    return 0;
}

4. 交互式命令
  printf("您中午想吃什么?:");
  char food[30];
  scanf("%s", food);
  printf("中午去吃: %s。\n", food);

利用场景

在咱们 iOS 我的项目中有多套证书因需频繁切换证书和 bundleId 等 Xcode 配置信息,由此制作了一个本人命令轻松切换各种配置

记得将可执行文件拷贝到罕用目录中再配置 PATH,防止后续不小心革除 Xcode 缓存找不到

退出移动版