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
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1399135
Accepted
slyfox1186
slyfox1186
Asked: 2022-03-25 10:00:52 +0800 CST2022-03-25 10:00:52 +0800 CST 2022-03-25 10:00:52 +0800 CST

不使用 > 在通过终端打开 gedit 无错误或锁定终端时会产生很大的不同

  • 772

我一直在尝试使用终端打开 gedit 与它能够使用的任何类型的文件,并且在文件关闭或终端输出中有任何错误消息之前不会阻止终端。

本质上的区别:

/dev/null
    or
>/dev/null

这会通过终端打开一个文本文件,不会锁定它,也不会显示任何错误消息。

function gedit {
    sudo -H gedit "$@" /dev/null 2>&1 &
    clear;
}

这不起作用,与上述方法相反。

function gedit {
    sudo -H gedit "$@" >/dev/null 2>&1 &
    clear;
}

有什么想法吗?

gnome-terminal
  • 2 2 个回答
  • 48 Views

2 个回答

  • Voted
  1. earthmeLon
    2022-03-25T10:40:39+08:002022-03-25T10:40:39+08:00

    问题可能是几件事,因为您将所有错误输出到/dev/null,您将无法读取这些错误。

    我建议在-H您打算执行特权的命令之前移动标志。我觉得sudo对这些东西很挑剔。(即:)sudo -H COMMAND_HERE。

    您当前的 shell 可能尚未升级到sudo,并且您被要求输入密码。

    
    function gedit {
        sudo sleep 0
        sudo -H gedit "$@" > /dev/null 2>&1 & disown
        clear
    }
    

    您可以尝试发出sleep 0或echo只是获得 sudo 提示。如果您已经输入了密码,那么这应该仍然有效。

    或者,如果您已gedit在 中设置sudoers,则可以删除该sudo sleep 0行,但无论哪种方式,您都需要-H修复sudo.

    • 0
  2. Best Answer
    Tilman
    2022-03-25T10:56:56+08:002022-03-25T10:56:56+08:00

    为了了解终端窗口中的命令在做什么,您需要从基本的 shell 语法开始。这个>角色有一个非常特殊的功能,因此它的存在在那个层面上产生了根本性的差异。

    首先是一个基本点:sudo像这样不加选择地添加是危险的,我建议不要这样做。如果隐藏在函数中,很容易忘记您正在使用root特权。sudo

    在您的第一个版本中:

    sudo -H gedit "$@" /dev/null 2>&1 &
    

    该sudo命令使用-H选项调用,参数gedit "$@" /dev/nullwhere"$@"被传递给函数的参数列表替换。因此gedit,以用户身份运行,root其中包含要编辑的文件列表,其中包括用户提供的所有文件以及文件/dev/null。(编辑是否/dev/null有意义超出了这个解释的范围。)2>&1这个版本中的元素什么都不做,因为标准输出和标准错误已经到了同一个目的地。该元素&将整个命令置于后台,以便再次释放终端窗口。因此,如果他们尝试将任何内容写入标准输出或标准错误,它将导致sudo或阻止。gedit

    在您的第二个版本中:

    sudo -H gedit "$@" >/dev/null 2>&1 &
    

    该sudo命令使用-H选项调用,参数gedit "$@"where"$@"被传递给函数的参数列表替换,如前所述。因此gedit,以用户身份运行,root并具有用户给出的要编辑的文件列表。该元素>将命令的标准输出重定向到以下文件/dev/null,有效地丢弃它,并且该元素2>&1将标准错误重定向到相同的目的地。该元素&像以前一样将整个命令置于后台,但由于这次标准输出和标准错误已被重定向,因此程序不会阻止在那里写入。

    一旦您了解了基本的功能差异,您就可以开始分析每个版本的行为方式为何以及如何改变您不喜欢的行为。例如,sudo可能会尝试提示输入与放入后台冲突的密码。如果你想坚持sudo反对我的建议,有一些方法可以解决这个问题,方法是sudo通过-vand-n选项将密码检查和程序运行步骤分开。

    • 0

相关问题

  • 使用终端应用程序的启动器,如何在程序完成后保持终端打开?

  • 如何为特定任务自动启动终端实例

  • 如何使 gnome-terminal 不透明?

  • Gnome-terminal 快捷方式在选项卡中打开多个 ssh 连接

  • 如何设置终端打开最大化

Sidebar

Stats

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

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve