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
    • 最新
    • 标签
主页 / user-266260

Alexei Martianov's questions

Martin Hope
Alex Martian
Asked: 2025-04-19 12:33:30 +0800 CST

在 { fd1>&fd3 } 之后,fd3>&fd1 如何(内部)将原始 fd 放回(或不放回)fd1?(“坏文件描述符”)

  • 10

`我正在阅读https://stackoverflow.com/questions/692000/how-do-i-write-standard-error-to-a-file-while-using-tee-with-a-pipe/692009#692009、https://stackoverflow.com/a/14737103/5499118的答案:

{ { ./aaa.sh | tee bbb.out; } 2>&1 1>&3 | tee ccc.out; } 3>&1 1>&2

正如我所检查的,它按照解释的那样工作,答案链接到https://unix.stackexchange.com/a/18904/266260,而后者链接到https://unix.stackexchange.com/a/3540/266260。

我不明白为什么{ ... 1>&3 ... } 3>&1会起作用(后面的重定向如何逆转前者的效果),因为当我想了解 man bash 时:

请注意,重定向的顺序很重要。例如,命令

ls > dirlist 2>&1

将标准输出和标准错误定向到文件 dirlist,而命令

ls 2>&1 > dirlist

仅将标准输出定向到文件 dirlist,因为在将标准输出重定向到 dirlist 之前,标准错误已从标准输出复制。

我发现重定向中的文件描述符重复:

重定向是通过 dup 系列系统函数实现的。dup 是“duplication”的缩写,例如:

3>&2

您将文件描述符 2 复制(dup2)到文件描述符 3 上...

因此我理解1>&3将 3 重复为 1,并且从该命令开始它们指向同一个对象。man dup:

成功返回后,新旧文件描述符可以互换使用。它们指向同一个打开的文件描述符

从dup解释上看,我预计3>&1不会有任何变化,因为 3 和 1 已经相同了。但显然情况并非如此,因为3>&1 省略{ { ./aaa.sh | tee bbb.out; } 2>&1 1>&3 | tee ccc.out; } 3>&1 1>&2结果bash: 3: bad file descriptor

在解释使用调用进行重定向时,哪些地方(如果有的话)是错误的dup?在1>&3和期间内部发生了什么3>&1?也许{ }在这里很重要,但我发现它们仅用于分组,并且每个man bash:

list 只是在当前 shell 环境中执行。

shell
  • 2 个回答
  • 364 Views
Martin Hope
Alex Martian
Asked: 2023-11-04 18:27:00 +0800 CST

手册页全局搜索正则表达式“.*word1.*word2.*”找不到包含这两个单词的页面

  • 6

我想man更有效地使用。我决定尝试--regex一下。然而:

~$ man --regex -K '.*textdomain.*perl.*'
--Man-- next: Locale::Messages(3pm) [ view (return) | skip (Ctrl-D) | quit (Ctrl-C) ]
^C
~$ man --regex -K '.*perl.*textdomain.*'
No manual entry for .*perl.*textdomain.*

我提取的源代码(首先查找哪个人打开)会产生空的 grep 结果,但会分别查找单词(textdomain、perl):

~/Documents$ grep '.*textdomain.*perl.*' Locale\:\:libintlFAQ.3pm
~/Documents$ grep '.*perl.*textdomain.*' Locale\:\:libintlFAQ.3pm

在该文件中,perl(例如第 74 行)位于textdomain(例如第 120 行)之前。为什么man --regex -K '.*perl.*textdomain.*'单词顺序颠倒了就找不到了?grep显示两个序列都不在一行上。实际上如何man --regex -K运作?.*是否应该寻找新线路?我想最后一个答案是“这取决于系统”(基于https://stackoverflow.com/questions/11924480/search-in-man-page-for-words-at-the-beginning-of-线)。

man
  • 1 个回答
  • 28 Views
Martin Hope
Alex Martian
Asked: 2023-10-21 11:23:49 +0800 CST

如何找出某个命令是在哪个 tty 中运行的?

  • 5

网络搜索发现例如https://askubuntu.com/questions/624848/view-history-of-commands-run-in-terminal,从中我了解到有文件~/.bash_history和临时历史记录。

我打开了许多终端,想要找出具体的输出,history向我显示我感兴趣的命令。有什么方法可以找出tty它运行的内容吗?

PS bash 历史记录,其中命令运行讨论where.

bash
  • 1 个回答
  • 37 Views
Martin Hope
Alex Martian
Asked: 2023-10-10 19:41:41 +0800 CST

如何确保 bash 脚本在 systemd 服务启动之前完成?

  • 5

我希望 bash 脚本在某个服务之前完成systemd其工作(而不仅仅是启动) ,据我所知,该解决方案涉及在其自己的服务完成之前完成。

网络搜索可以找到有关如何开始的问题。据我了解,Before=选择是等到设备启动。因此阅读时man systemd.service我只看到一个选项Type=forking::

当父进程退出时,服务管理器将认为该单元已启动。

即使我没有在脚本中分叉任何进程。我在这里说得对吗?这是否能保证(除了错误等)我的脚本将在服务启动之前完成Before=?

例如其他类型:Type=exec:

“而在服务进程中的 fork() 和 execve() 都成功之前,exec 将不会继续。”

我不清楚proceed这里的意思,同时阅读man execve我也不明白 systemd 如何知道是否execve成功:

execve() 成功后不返回,并且根据新加载程序的内容覆盖调用进程的文本、初始化数据、未初始化数据(bss)和堆栈。

据我所知,其他类型(notify、dbus)man在进程启动时需要特殊功能。

systemd
  • 1 个回答
  • 33 Views
Martin Hope
Alex Martian
Asked: 2023-07-28 00:49:34 +0800 CST

find -exec bash -c {} +:为什么只有一个文件找到两个?

  • 5
touch 1.txt 2.txt
find . -name "[12].txt" -exec sh -c 'echo "${1}"' sh {} + -exec echo {} +
./2.txt
./2.txt ./1.txt

为什么echo内部sh -c只输出一个文件?今天我以为我理解了“find”的 -exec 选项的find工作原理,但现在又感到困惑了。得到相同的结果。TIA-exec bash

bash
  • 1 个回答
  • 21 Views
Martin Hope
Alex Martian
Asked: 2022-12-04 00:40:50 +0800 CST

如何通过 Nemo for Linux Mint 中的“打开方式”应用程序列表运行以空格命名的脚本?

  • 5

长话短说

Exec=gnome-terminal -- bash -c 'script="%u";if [[ -e "$script" ]] ; then "$script" ; else exec bash ; fi'GNOME 桌面文件中的行运行脚本,但名称中只有空格。如何运行任意名称的脚本?

“我想要的”和我尝试过的内容的完整描述:

我想默认从 Nemo(基于 Nautilus 的文件管理器 AFAIK)在编辑器中打开脚本,但仍然能够在终端中打开,作为 Nemo 中打开这些文件的另一个选项。

网络搜索找到https://askubuntu.com/questions/286621/how-do-i-run-executable-scripts-in-nautilus。对我来说并不新鲜,但是当我在文件管理器中将选项设置为“查看”时,没有在“打开方式”中运行的选项,我必须单独打开终端并输入脚本名称。

我打开了/usr/share/applications/org.gnome.Terminal.desktop,它运行Exec=gnome-terminal --window。我找到了https://askubuntu.com/questions/974756/how-can-i-open-a-extra-console-and-run-a-program-in-it-with-one-command并更改了行Exec=gnome-terminal --window对于示例行Exec=gnome-terminal -- bash -c 'script="%u";if [[ -e "$script" ]] ; then "$script" ; else exec bash ; fi',它适用于名称中没有空格的脚本,但对于包含空格的脚本,它不会产生预期的脚本输出。也许没什么大不了的,但我想要更好的。

%u此处确认的 eg 的含义: https ://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-1.0.html 。

shell-script
  • 1 个回答
  • 18 Views
Martin Hope
Alexei Martianov
Asked: 2019-10-25 22:31:43 +0800 CST

screen -D -R ... 如有必要,远程分离和注销 - 这里“远程注销”的目的是什么?

  • 0

我目前在使用工作中传递给我的用例screen是ssh服务器,su技术用户帐户,然后是screen -RD. 当ssh会话由于超时而自动丢失时,我重复这些步骤并在服务器上为该技术帐户设置我的“终端状态”,就像没有发生连接重置一样。

我想了解-RD标志的重要性和我读过 的屏幕手册页(我强调):

-D -R

附在此时此地。详细地说,这意味着:如果会话正在运行,则重新连接。如有必要,请先远程分离并注销。如果它没有运行,请创建它并通知用户。这是作者的最爱。

我试过网络搜索logout remotely screen,相关的最高结果只是https://www.tecmint.com/keep-remote-ssh-sessions-running-after-disconnection/,我在其中读到了关于分离的信息:

分离屏幕

就在您想退出远程会话,但又想保持在该机器上创建的会话时,您需要做的就是将屏幕与终端分离,这样它就没有控制终端了。完成此操作后,您可以安全地注销。

在 SE 上,我发现如何从另一个终端远程分离屏幕和https://askubuntu.com/questions/526972/remotely-log-out-of-graphical-gnome-session但这些是其他具体问题。

我曾尝试阅读有关登录、退出等的 wiki,但仍不清楚。我可以远程注销哪些会话?我screen在服务器上运行......也许这些标志与我的特定用例无关?-RD(远程注销)最常见的用例是什么?

ssh
  • 1 个回答
  • 761 Views
Martin Hope
Alexei Martianov
Asked: 2019-10-24 21:33:01 +0800 CST

bash: FOO_VARIABLE=foo;./test 没有将 foo 变量传递给测试 - 为什么不继承?

  • 0

我进行了网络搜索,并阅读了几篇关于在 bash 中使用变量的文章,包括wiki,但不明白为什么在 bash 中运行不会FOO_VARIABLE=foo;./test导致测试:$FOO_VARIABLEfoo

默认情况下,创建进程时,它会继承其父进程的重复环境,但父进程在创建子进程时所做的显式更改除外。

还读过:环境变量继承的例外

“除了显式更改”:FOO_VARIABLE=foo ./test- 导致test脚本知道FOO_VARIABLE,但为什么在第一种方式它不知道?

echo $0
-bash

cat ./test
echo $MY_TEST
MY_TEST=test$MY_TEST
echo $MY_TEST

MY_TEST=ret;./test

test

在 CentOS 7 和 Mac OS 上测试。

添加: https ://stackoverflow.com/questions/9772036/pass-all-variables-from-one-shell-script-to- 另一种方法是源(从第一个调用第二个脚本),然后export不需要 - 为什么我的情况不同?

修改至上述内容:这是我的匆忙,对细节不太关注:我.在采购部分错过了(点),现在我已经阅读:https ://superuser.com/questions/176783/what-is-the-difference- between-executing-a-bash-script-vs-sourcing-it,那部分很清楚。

https://askubuntu.com/questions/26318/environment-variable-vs-shell-variable-whats-the-difference 是的,我的是本地的,但为什么不通过继承(fork call)传递?

bash
  • 2 个回答
  • 192 Views
Martin Hope
Alexei Martianov
Asked: 2019-01-23 03:40:32 +0800 CST

's=.*/==' 在 sed 中有什么作用?[复制]

  • 12
这个问题在这里已经有了答案:
命令“sed 's~ ~~g'”中的“~”的目的是什么?[重复] (2个答案)
3年前关闭。

我在 sh 脚本的上下文中看到sed 's=.*/=='了,我很困惑。我在 sed 手册或网络搜索 (for sed s=) 中找不到如何s使用,而不是s///. 除了s我在这里只看到一个潜在的命令=(打印当前输入行号),但在这种情况下,其余的在做什么......

在 shell 中运行命令会产生与 eg 的输入相同的输出echo 'jkfdsa=335r34',而echo 'jkfdsa=335r34' | sed 's/=.*/==/'根据手册进行替换。还将命令稍微修改为 eg echo 'jkfdsa=3' | sed 's798=.*/==/'give
sed: -e expression #1, char 11: unterminated 's' command,因此原始应该具有一些正确的含义。它是什么?

sed
  • 3 个回答
  • 2786 Views
Martin Hope
Alexei Martianov
Asked: 2018-04-30 20:09:09 +0800 CST

NTFS $MFTMirr 与 $MFT 不匹配

  • 4

移动笔记本电脑时,我正在将文件复制Linux Mint到NTFS外部USB磁盘,可能 USB 连接丢失,现在出现错误$MFTMirr does not match $MFT。挂载错误消息是使用 Windows 修复驱动器错误。但是,我想使用 Linux 来修复那个恕我直言的常见错误。

mount ntfs
  • 2 个回答
  • 4205 Views
Martin Hope
Alexei Martianov
Asked: 2018-04-15 04:07:25 +0800 CST

防止系统进入睡眠/挂起 - Xviewer/VLC 如何做到这一点

  • 7

当Xviewer或VLC在 Linux Mint 上处于全屏模式时,我的笔记本电脑不会进入睡眠状态。其他一些应用程序(例如mpv全屏)不会阻止睡眠。

GUI中没有Xviewer关于保持唤醒状态的选项。

如何Xviewer预防和如何关闭?

如何为我认为这种行为有益的应用程序打开睡眠预防,Transmission例如?

linux linux-kernel
  • 1 个回答
  • 9902 Views

Sidebar

Stats

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

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

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

    • 4 个回答
  • Marko Smith

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

    • 5 个回答
  • Marko Smith

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

    • 3 个回答
  • 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
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +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

热门标签

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