>

빠른 Mac OS 용 콘솔 앱을 개발 중이며 bash 명령을 호출 할 때 사용자 환경 변수에 액세스하려고합니다. 다음 코드를 사용하여 bash 명령을 신속하게 실행합니다.

@discardableResult
func shell(_ command: String) -> String? {
    let task = Process()
    task.launchPath = "/usr/bin/env"
    task.arguments = ["bash", "-c", command]
    let pipe = Pipe()
    task.standardOutput = pipe
    task.launch()
    let data = pipe.fileHandleForReading.readDataToEndOfFile()
    let output = String(data: data, encoding: String.Encoding.utf8)
    return output
}

/usr/bin/env 를 실행할 때  내 터미널에서 원하는 변수를 볼 수 있지만 shell("/usr/bin/env") 를 실행할 때  코드에서 하나를 볼 수 없습니다. ProcessInfo.processInfo.environment["MY_ENV_VAR"]  또한 필요한 변수를 보여주지 않습니다. 신속한 사용자 정의 환경 변수에 액세스하는 방법은 무엇입니까?

  • 답변 # 1

    최근에 비슷한 문제로 어려움을 겪고 있습니다. 완벽한 솔루션은 없지만 몇 가지 제안이 있습니다.

    먼저, 정확히 MY_ENV_VAR 의 위치가 중요합니다  정의되었습니다. 그것이 .bashrc 안에 있다면  파일, -i 를 사용하여 대화식 모드에서 bash를 시작해야합니다.  해당 파일을 읽습니다. .bash_profile 에 정의 된 경우 -l 를 사용해야합니다.  이른바 로그인 쉘을 시작합니다.

    내 경우에는둘 다 -i 를 사용해야합니다  그리고 -l  내가 따르는 env vars를 보려면 사용자가 bash를 사용하지 않으면이 모든 것이 훨씬 복잡해집니다. 예를 들어 물고기를 사용하므로 bash 에 관계없이 필수 ENV 변수가 bash에 전혀 보이지 않습니다.  호출.

    그래서 실제로하는 일은먼저사용중인 쉘을 결정한 다음 -i -l -c 를 사용하여 해당 쉘을 호출하는 것입니다. . zsh, bash 및 fish는 모두 이러한 옵션을 지원합니다.

    실제로 고통스럽고, 방법이 신뢰할 만한지조차 확실하지 않습니다. 그러나 여러 다른 사용자 환경에서 나를 위해 노력하고 있습니다.

  • 답변 # 2

    ProcessInfo.processInfo.environment
    
    

    앱을 실행하는 사용자에게 환경 변수를 제공하지만 Xcode는 사용자의 권한과 환경으로 앱을 실행하지 않습니다.

    테스트 단계에서 아래 사진과 같이 Xcode에서 필요한 변수를 정의 할 수 있습니다

    확실하게하려면 다음 코드를 파일에 작성하십시오 (예 : "main.swift") :

    import Foundation
    print(ProcessInfo.processInfo.environment)
    
    

    그리고 쉘에서 swiftc main.swift 를 실행하십시오.  그런 다음 ./main  사용 변수가 표시됩니다

    그러나C기능 getenv 를 사용할 수 있습니다  

    그것은 UnsafePoiter<Int8> 를 가지고  이것이 필요한 키입니다 (예 : "HOME") : a c char *

    와이즈 비즈의 귀환  : 가치

    UnsafeMutablePointer<Int8>!

관련 자료

  • 이전 https - //queryyahooapiscom/v1/public/yql?q=select * from yahoofinancexchange 여기서 쌍이 ("arsars")&env = store : //da
  • 다음 ios - MPMediaPlayer Swift 4를 사용한 페이드 (애니메이션) 볼륨