我想要的是打开默认 shell,然后调用另一个并在那里执行命令。
正在尝试这样的事情:
c:/Windows/System32/bash.exe -c "zsh & zstyle"
或
cmd/k "c:/Windows/System32/bash.exe -c zsh"& zstyle
- 这个打开的 shell 但不运行命令
或
c:/Windows/System32/bash.exe -c "zsh -c 'zstyle'"
目前我正在使用 Windows 的 cmder/conemu 终端。
最佳答案
不幸的是,使用 -c
将启动命令传递给 zsh
并保持打开以供交互使用(使用 -i
) 不起作用。
免责声明:以下解决方案是从常规命令提示符 (cmd.exe
) 而非 cmder/conemu 测试的,但我希望它们也能在那里工作。
要从 PowerShell (v3+) 试用它们,请将 --%
作为第一个参数插入(紧跟在 bash.exe
之后)。
解决方法如下:
c:/Windows/System32/bash.exe -c "zsh -c 'zstyle' && exec zsh -i"
请注意,命令 zstyle
是在一个不同的、 transient 的 zsh
实例中执行的,因此这种方法不适用于目的是修改保持打开状态的交互式 shell 的环境。
如果这是一个要求,事情就会变得更复杂(这个解决方案由 this answer 提供):
c:/Windows/System32/bash.exe -c "{ { echo 'zstyle'; echo 'exec 0<&3-';} | zsh -i; } 3<&0"
但是请注意,正在执行的两个命令将在它们的输出(如果有的话)显示之前被打印,并在提示符之前显示 - 就好像这些命令是交互式输入的一样。
关于shell - 如何打开 shell 然后在其中执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40138177/