kareman / SwiftShell

A Swift framework for shell scripting.
https://kareman.github.io/SwiftShell
MIT License
1.03k stars 87 forks source link

Not support `Pod` command #80

Closed josercc closed 4 years ago

josercc commented 4 years ago

which pod

/usr/local/bin/pod

run("/usr/local/bin/pod", "--version") error

kareman commented 4 years ago

This is most likely because the environment is different in your Terminal and your Swift application. Try running the command “env” both in the terminal and the Swift application. See if there is anything missing in the output from the Swift application that the pod command might need.

You can change the environment in SwiftShell by changing the main.env dictionary.

josercc commented 4 years ago

Ok thanks

josercc commented 4 years ago

@kareman

When I compared main.env and the terminal, the value ofPATH was really different. print (main.env [" PATH "]) /Applications/Xcode.app/Contents/Developer/usr/bin:/usr/ bin:/bin:/usr/sbin:/sbin When I execute ENV in the terminal, the following path is printed /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Library/Apple/bin When I execute pod --version using the terminal'sPATH, the version can be successfully printed. I want to write a program for others to use, but I can't get the terminal's PATH path to set it, so that the commands inside can't be executed? How to solve this?

The main difference I have made is that main.env ["PATH"] is missing / usr / local / bin. I remember what version of Mac was modified by Apple. Now modify the current PATH code with the following code to run perfectly. Thank you very much for contributing such a perfect framework, so that I no longer have to worry about writing scripts with Shell, and no need to worry about sed syntax.

       guard var path = main.env["PATH"] else {
            return
       }
        path += ":/usr/local/bin"
        main.env["PATH"] = path
        main.env["LANG"] = "en_US.UTF-8"
        try? runAndPrint("pod", "--version")
josercc commented 4 years ago

@kareman Can you add /usr/local/bin toPATH in the framework. This problem may be encountered by many people, adding will solve many people's questions.

kareman commented 4 years ago

I’m glad you got it working. I cannot set any environment variables in the framework, because they need to be inherited from the environment in which the application is running. So if you make a commandline application using SwiftShell, and run it from the terminal, it needs to only use the environment that the terminal currently has.