# LibTmux.Server.RunShellAsync

- **Module:** LibTmux
- **Package:** LibTmux
- **Language:** C#
- **Kind:** method
- **Source:** https://github.com/libtmux/libtmux-dotnet/blob/cf34b255c896d19a97e7d7fabea58609c916012d/src/LibTmux/Server.Execution.cs#L74
- **Page:** https://libtmux.org/en/csharp/latest/reference/libtmux-server-runshellasync/

tmux command: [`run-shell`](/en/tmux/latest/manual/run-shell/)

```
LibTmux.Server.RunShellAsync(request: RunShellRequest, cancellationToken: CancellationToken) -> Task<IReadOnlyList<string>?>
```

Runs a shell command and reports what it printed.

The directory flag arrived in tmux 3.4, the error-output flag in 3.6,
and passing arguments without a shell in 3.7.
On tmux 3.3a and 3.4, shell text goes to pane view mode, so the process
request can return an empty collection even when the shell printed lines.

## Parameters

- `request` (`RunShellRequest`): What to run, and how.
- `cancellationToken` (`CancellationToken`): Cancels waiting for tmux's reply. tmux itself is not told: the server,
not this process, owns <c>run-shell</c>'s spawned command, so cancelling
stops this call from waiting on it, not the command from running. Nor
does stopping the whole server: <see cref="KillAsync" /> does not reap
a <c>run-shell</c> child either, so it keeps running as its own
orphaned process.

## Returns

What the command printed, or null when tmux did not wait for it.
