@@ -37,7 +37,8 @@ import Logging
37
37
logger: Logger ? = nil ,
38
38
outputHandle: FileHandle ? = nil ,
39
39
errorHandle: FileHandle ? = nil ,
40
- environment: [ String : String ] ? = nil
40
+ environment: [ String : String ] ? = nil ,
41
+ eofTimeout: DispatchTimeInterval = . milliseconds( 10 )
41
42
) throws -> ( stdout: String , stderr: String ) {
42
43
let command = " cd \( path. escapingSpaces) && \( command) \( arguments. map ( \. string) . joined ( separator: " " ) ) "
43
44
@@ -46,7 +47,8 @@ import Logging
46
47
logger: logger,
47
48
outputHandle: outputHandle,
48
49
errorHandle: errorHandle,
49
- environment: environment
50
+ environment: environment,
51
+ eofTimeout: eofTimeout
50
52
)
51
53
}
52
54
@@ -94,7 +96,8 @@ import Logging
94
96
logger: Logger ? = nil ,
95
97
outputHandle: FileHandle ? = nil ,
96
98
errorHandle: FileHandle ? = nil ,
97
- environment: [ String : String ] ? = nil
99
+ environment: [ String : String ] ? = nil ,
100
+ eofTimeout: DispatchTimeInterval = . milliseconds( 10 )
98
101
) throws -> ( stdout: String , stderr: String ) {
99
102
try shellOut (
100
103
to: command. command,
@@ -104,7 +107,8 @@ import Logging
104
107
logger: logger,
105
108
outputHandle: outputHandle,
106
109
errorHandle: errorHandle,
107
- environment: environment
110
+ environment: environment,
111
+ eofTimeout: eofTimeout
108
112
)
109
113
}
110
114
@@ -434,7 +438,14 @@ extension ShellOutCommand {
434
438
// MARK: - Private
435
439
436
440
private extension Process {
437
- @discardableResult func launchBash( with command: String , logger: Logger ? = nil , outputHandle: FileHandle ? = nil , errorHandle: FileHandle ? = nil , environment: [ String : String ] ? = nil ) throws -> ( stdout: String , stderr: String ) {
441
+ @discardableResult func launchBash(
442
+ with command: String ,
443
+ logger: Logger ? = nil ,
444
+ outputHandle: FileHandle ? = nil ,
445
+ errorHandle: FileHandle ? = nil ,
446
+ environment: [ String : String ] ? = nil ,
447
+ eofTimeout: DispatchTimeInterval = . milliseconds( 10 )
448
+ ) throws -> ( stdout: String , stderr: String ) {
438
449
self . executableURL = URL ( fileURLWithPath: " /bin/bash " )
439
450
self . arguments = [ " -c " , command]
440
451
@@ -487,7 +498,7 @@ private extension Process {
487
498
try self . run ( )
488
499
self . waitUntilExit ( )
489
500
490
- if outputGroup. wait ( timeout: . now( ) + . milliseconds ( 100 ) ) == . timedOut {
501
+ if outputGroup. wait ( timeout: . now( ) + eofTimeout ) == . timedOut {
491
502
logger? . warning ( " ShellOut.launchBash: Timed out waiting for EOF! (command: \( command) ) " )
492
503
}
493
504
0 commit comments