AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 484548
Accepted
Tim
Tim
Asked: 2018-11-28 16:13:43 +0800 CST2018-11-28 16:13:43 +0800 CST 2018-11-28 16:13:43 +0800 CST

终端仿真器是否总是通过 shell 间接执行程序?

  • 772

终端仿真器是否总是通过 shell 间接执行程序?

例如,当我们打开一个终端仿真器窗口时,它会自动执行一个 shell,而我们只能在 shell 中键入命令。

例如,当直接在终端仿真器上运行程序时,例如

xterm -e "echo hello; sleep 5"

xterm是通过 shell 间接执行程序,还是不使用 shell 直接执行程序?

xterm terminal-emulator
  • 3 3 个回答
  • 678 Views

3 个回答

  • Voted
  1. Best Answer
    mosvy
    2018-11-28T18:47:28+08:002018-11-28T18:47:28+08:00

    这取决于终端仿真器。

    xterm将首先execvp(2)使用给定的参数调用-e,但如果失败并且后面有一个command参数-e,它也会尝试$SHELL -c command。

    mlterm如果失败,rxvt只会出错execvp。

    如果我的第二段没有说服你,你可以试试这个:

    $ mkdir /tmp/tbin; ln -s /usr/bin/vi '/tmp/tbin/echo hello; sleep 5'
    $ PATH=$PATH:/tmp/tbin xterm -e 'echo hello; sleep 5'
    

    或者看源码。

    • 4
  2. X Tian
    2018-11-29T07:48:21+08:002018-11-29T07:48:21+08:00

    在您的示例中,使用该-e选项,然后xterm将启动一个 shell,手册说明了这一点。

    可以覆盖 xterm 对 shell 的默认搜索,因此您可以为此提供自己的程序,但是当您覆盖 shell 时,您不能使用 -e 选项。当您覆盖 shell 时,您的 shellfork() + exec()将由 xterm 直接运行 ( )。

    以下是相关部分,

    One  parameter  (after all options) may be given.  That overrides xterm's built-in choice of
    shell program.  Normally xterm checks the SHELL variable.  If that is not set,  xterm  tries
    to  use  the  shell  program specified in the password file.  If that is not set, xterm uses
    /bin/sh.  If the parameter is not a relative path, i.e., beginning with “./” or “../”, xterm
    looks for the file in the user's PATH.  In either case, it constructs an absolute path.  The
    -e option cannot be used with this parameter since it  uses  all  parameters  following  the
    option.
    

    和

    -e program [ arguments ... ]
       This option specifies the program (and its command line arguments) to be run in the
       xterm window.  It also sets the window title and icon name to be the basename of the
       program being executed if neither -T nor -n are given on  the  command  line.   This
       must be the last option on the command line.
    

    看看你正在执行什么,

    "echo hello; sleep 5"
    

    解析那个字符串的是shell,它使用PATHenv变量来查找这两个命令,并意识到它确实是用分号分隔的两个命令,xterm不要那样做!

    • 2
  3. Ipor Sircer
    2018-11-28T16:18:49+08:002018-11-28T16:18:49+08:00

    根据手册,您可以使用参数禁用登录外壳+ls:

       +ls     This option indicates that the shell that is started should not
               be a login shell (i.e., it will be a normal “subshell”).
    

    所以xterm -e "echo hello"产生一个shell,但xterm +ls -e "echo hello"没有。

    • 0

相关问题

  • 以文件形式访问 xterm 的回滚缓冲区

  • xterm 不使用 -name 加载配置

  • 关闭手册页中的终端铃和更少

  • 在 xterm 中看不到菜单

  • 当 Alt_R 为 mod4 时,XTerm*metaSendsEscape 中断

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve