This is something I have been struggling with for a few days and each time I think I have adjourned it, it falls apart.
I want to launch a new Windows Terminal window but with two caveats:
-command
parameterA few days ago, I figured out how to send command line arguments to the profiles shell, Pass a command line argument to the new terminal window that is about to be launched? #17521.
This successfully opens a new terminal window with my_profile
profile. The host prints my message
:
wt -p my_profile pwsh -noExit -command "'my message'"
All was good and well until it broke on me today. The following does open a new terminal window but the window prints an error:
wt -p my_profile pwsh -noExit -command "'my message' ; 'my second message'"
The error is printed by windows terminal (not pwsh):
[error 2147942402 (0x80070002) when launching `" 'my second message'"']
If I eliminate WT from the equation, pwsh correctly receives input to its -command
parameter:
pwsh -noExit -command "'my message' ; 'my second message'"
#my message
#my second message
Is pwsh really not at fault here?
Is there some sort of pwsh mechanism that can help me to navigate around this issue?
I would appreciate any solutions in either pwsh or wt
Windows Terminal 1.19 preview
pwsh 7.4
win 11
Windows Terminal uses ;
to separate "actions" in the wt
command line:
The wt command line accepts two types of values: options and commands.
Options are a list of flags and other parameters that can control the behavior of the wt command line as a whole.
Commands provide the action, or list of actions separated by semicolons, that should be implemented. If no command is specified, then the command is assumed to be new-tab by default.
So, if you look back at your wt
command line:
wt -p my_profile pwsh -noExit -command "'my message' ; 'my second message'"
Windows Terminal is trying to run the equivalent of:
wt -p my_profile ; new-tab pwsh -noExit -command "'my message' ; new-tab 'my second message'"
first "action": ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
second "action": ^^^^^^^^^^^^^^^^^^^^
and you end up with a new Windows Terminal with two tabs - one for each new-tab
"action":
pwsh -noExit -command "'my message'
- the first tab has the output my message
- note that even though the "
quotes in the -command
argument aren't closed properly, powershell still executes it fine (you can try it from a command prompt, but not an interactive powershell session)
'my second message'"
- the second tab has the error message [error 2147942402 (0x80070002) when launching `" 'my second message'"']
because 'my second message'"
isn't a valid command. (Note the extra leading "
in the error - I'm presuming Windows Terminal has added this because the second command starts with a space character, but I'm not sure tbh).
I couldn't find it documented, but I tried escaping ;
as \;
which seems to work - wt
will then treat the \;
as a literal ;
in the "action" command:
wt -p my_profile pwsh -noExit -command "'my message' \; 'my second message'"
single action: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
and you end up with a single tab with the output:
my message
my second message
Note - all of the above was tested in a Windows Command Prompt - it's possible different escaping rules will apply depending on where you're calling wt
from...