JohnSundell / ShellOut

Easily run shell commands from a Swift script or command line tool
MIT License
870 stars 83 forks source link

FileHandle crash if you run multiple shellout calls #41

Closed f-meloni closed 4 years ago

f-meloni commented 5 years ago

Hi 👋 I am developing this tool https://github.com/f-meloni/Rocket, and i'm using ShellOut for some of the available steps. I would like to redirect the output of each step on the standard output, but if i do it this is what happens.

ShellOut method call:

func launchScript(withContent content: String) throws {
        try shellOut(to: ["export VERSION=\(version)", content], outputHandle: FileHandle.standardOutput)
}

Example steps:

steps:
  - script:
      content: echo "releasing $VERSION"
  - script:
      content: echo "releasing $VERSION"

Now if i run it with for example with version 0.3.0 This is what happens:

releasing 0.3.0
2018-12-05 08:10:03.537 Rocket[6079:92461] *** Terminating app due to uncaught exception 'NSFileHandleOperationException', reason: '*** -[_NSStdIOFileHandle writeData:]: unknown error'
*** First throw call stack:
(
    0   CoreFoundation                      0x00007fff36a9ae65 __exceptionPreprocess + 256
    1   libobjc.A.dylib                     0x00007fff62af6720 objc_exception_throw + 48
    2   CoreFoundation                      0x00007fff36a9ac97 +[NSException raise:format:] + 201
    3   Foundation                          0x00007fff38d701f2 -[NSConcreteFileHandle writeData:] + 74
    4   Rocket                              0x0000000103f484fc $SSo6NSTaskC8ShellOutE10launchBash33_839723A297212BDF262C1834C3E29C1FLL4with12outputHandle05errorN0S2S_So06NSFileN0CSgAKtKFyAJcfU_yycfU_ + 332
    5   Rocket                              0x0000000103f49a05 $SSo6NSTaskC8ShellOutE10launchBash33_839723A297212BDF262C1834C3E29C1FLL4with12outputHandle05errorN0S2S_So06NSFileN0CSgAKtKFyAJcfU_yycfU_TA + 21
    6   Rocket                              0x0000000103f4855d $SIeg_IeyB_TR + 45
    7   libdispatch.dylib                   0x00007fff63b75d53 _dispatch_call_block_and_release + 12
    8   libdispatch.dylib                   0x00007fff63b76dcf _dispatch_client_callout + 8
    9   libdispatch.dylib                   0x00007fff63b7d124 _dispatch_lane_serial_drain + 618
    10  libdispatch.dylib                   0x00007fff63b7dbdc _dispatch_lane_invoke + 388
    11  libdispatch.dylib                   0x00007fff63b86090 _dispatch_workloop_worker_thread + 603
    12  libsystem_pthread.dylib             0x00007fff63db663c _pthread_wqthread + 409
    13  libsystem_pthread.dylib             0x00007fff63db6435 start_wqthread + 13
)
libc++abi.dylib: terminating with uncaught exception of type NSException
[1]    6079 abort      ./.build/x86_64-apple-macosx10.10/debug/Rocket 0.3.0

The problem is the standard file handle close call solved on https://github.com/JohnSundell/ShellOut/pull/23 (i tried this and it solves the problem work)

Is there any known workaround that i can use to redirect the output on the stdoutput in the meantime while that PR or maybe https://github.com/JohnSundell/ShellOut/pull/32 gets reviewed an (if they are ok) merged? :)

JohnSundell commented 4 years ago

@f-meloni This issue should be fixed as of ShellOut 2.2.1, right?

f-meloni commented 4 years ago

Yes thank you very much!