我默认的shell环境bash
,我想开始xterm
与zsh
和执行某些命令。
一般来说,要执行一些命令,我使用以下
xterm -e "ls -lrt;pwd;whoami"
Run Code Online (Sandbox Code Playgroud)
这是在bash
shell 中执行命令xterm
。
要xterm
使用不同的外壳启动,我正在使用以下内容。
xterm -ls /bin/zsh
Run Code Online (Sandbox Code Playgroud)
那么,我怎样才能将这两者结合起来呢?当我尝试。我收到以下错误。
[dinesh@mypc]$ xterm -ls /bin/zsh -e "ls"
xterm: bad command line option "/bin/zsh"
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?
Kus*_*nda 10
不,-ls
选项xterm
不带参数,它只是指定xterm
启动的外壳程序应该是登录外壳程序。
这是-ls
标志的完整部分,突出显示了与您的问题相关的部分:
-ls 该选项表示启动的shell xterm 窗口将是一个登录 shell(即第一个字符 of argv[0] 将是一个破折号,向外壳表明它 应该阅读用户的 .login 或 .profile)。 如果 -e 是,则 -ls 标志和 loginShell 资源将被忽略 也给了,因为xterm不知道怎么做shell 执行给定的命令后启动它 登录 shell - 用户选择的 shell 不必是 Bourne 毕竟是壳。此外, xterm -e 应该提供一个 为需要的其他应用程序提供一致的功能 在窗口中启动文本模式程序,如果 loginShell 是 不被忽略, ~/.profile 的结果可能会干扰 那。 如果您确实希望同时获得 -ls 和 -e 的效果,您可以 摆脱类似的东西 xterm -e /bin/bash -l -c "我的命令在这里" 最后,-ls 没有被完全忽略,因为 xterm -ls -e 确实写入 /var/run/wtmp 条目(如果配置为这样做), 而 xterm -e 没有。
Sté*_*las 10
xterm
使用存储在$SHELL
(最初在登录到登录 shell 时设置的变量)中的 shell 来解析命令行。因此,如果您希望命令行被zsh
shell解析,只需执行以下操作:
SHELL=/bin/zsh xterm -e 'echo $ZSH_VERSION; sleep 4'
Run Code Online (Sandbox Code Playgroud)
或者你可以这样做:
xterm -e zsh -c 'echo $ZSH_VERSION; sleep 4'
Run Code Online (Sandbox Code Playgroud)
当传递多个参数时,xterm
不会调用 shell 来解析命令行,它会直接执行第一个参数及其参数execvp()
。