shell - 如何打开 shell 然后在其中执行命令

标签 shell unix command-line conemu cmder

我想要的是打开默认 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/

相关文章:

C shell,父进程捕获的信号仍然转到子进程。

shell - 如何使用 tcl-expect 等待进程完成

linux - 如何删除X个字符后的所有单词

c++ - 编译器错误 undefined symbol

linux - makefile:如何在宏中调用宏

linux - 替换 zsh 命令行中的字符串

bash - 当我的命令被超时终止时,如何使 "Terminated"消息静音?

windows - Postgres "psql not recognized as an internal or external command"

c++ - Windows 命令行 : how to start a program in a specific folder

bash - 如何在 shell 脚本中记录带有时间戳的 echo 语句