From adf7186d5499cb2edb8df88805c79dcd21592da5 Mon Sep 17 00:00:00 2001 From: Danny Canter Date: Mon, 11 Aug 2025 23:53:53 -0400 Subject: [PATCH] CLI (run): Only ask for stdin for -i (#483) Today if you asked for a pty and also wanted to detach we'd open stdin and then immediately close that pipe which would close the guest relay as well. I don't believe we need stdin open unless it's asked for with -i. Truthfully there's one extra bit here that is needed which is if -i and -d are supplied we need to tell the daemon to open stdin, but not send an fd (as they're client supplied and the client/cli is going to exit immediately). That will need to be a followup, as it's mainly useful for attach which we don't have today. --- Sources/CLI/RunCommand.swift | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/Sources/CLI/RunCommand.swift b/Sources/CLI/RunCommand.swift index 605a3201..82b9b956 100644 --- a/Sources/CLI/RunCommand.swift +++ b/Sources/CLI/RunCommand.swift @@ -205,30 +205,28 @@ struct ProcessIO { var stdio = [FileHandle?](repeating: nil, count: 3) let stdin: Pipe? = { - if !interactive && !tty { + if !interactive { return nil } return Pipe() }() if let stdin { - if interactive { - let pin = FileHandle.standardInput - let stdinOSFile = OSFile(fd: pin.fileDescriptor) - let pipeOSFile = OSFile(fd: stdin.fileHandleForWriting.fileDescriptor) - try stdinOSFile.makeNonBlocking() - nonisolated(unsafe) let buf = UnsafeMutableBufferPointer.allocate(capacity: Int(getpagesize())) + let pin = FileHandle.standardInput + let stdinOSFile = OSFile(fd: pin.fileDescriptor) + let pipeOSFile = OSFile(fd: stdin.fileHandleForWriting.fileDescriptor) + try stdinOSFile.makeNonBlocking() + nonisolated(unsafe) let buf = UnsafeMutableBufferPointer.allocate(capacity: Int(getpagesize())) - pin.readabilityHandler = { _ in - Self.streamStdin( - from: stdinOSFile, - to: pipeOSFile, - buffer: buf, - ) { - pin.readabilityHandler = nil - buf.deallocate() - try? stdin.fileHandleForWriting.close() - } + pin.readabilityHandler = { _ in + Self.streamStdin( + from: stdinOSFile, + to: pipeOSFile, + buffer: buf, + ) { + pin.readabilityHandler = nil + buf.deallocate() + try? stdin.fileHandleForWriting.close() } } stdio[0] = stdin.fileHandleForReading