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-582916

futurewave's questions

Martin Hope
futurewave
Asked: 2024-04-05 06:13:19 +0800 CST

更复杂的 case 语句的正确语法如何?

  • 7
case "$1","$name" in
    -py | --python | --python3,*) if [[ "$name" =~ \..+$ ]]; then

那并没有捕捉到东西,实际上它应该捕捉到东西,比如……

USERNAME@HOSTNAME:~$ myscript --python surfer

有趣的事情:将多模式条件简化为......

    --python,*) if [[ "$name" =~ \..+$ ]]; then

它有效!由于极其重复的前景,必须将该部分放置 3 次:第一次为-py,然后为--python,最后为--python3捕获所有模式。

但另一件事是——相反:

case "$1" in
    -py | --python | --python3)    if [[ ! "$name" =~ \.py$ ]]; then

很好,有效!因此,这反驳了我的假设,即多模式语法可能不正确,可能需要删除空格,或者将所有 3 个模式的总和周围的任何类型的括号解释为一个组,其中第一个 OR 第二个 OR第三种模式应该被捕获。

综上所述,我确实有这样的印象:在 GNU bash 版本 4.3 中,你不能同时拥有多重模式和除了该条件之外的第二个条件,例如“$name”。可能是这样吗?或者我在尝试实现这一目标时犯了一个错误?

bash
  • 1 个回答
  • 245 Views
Martin Hope
futurewave
Asked: 2024-03-21 07:33:44 +0800 CST

如何让 sed 取消注释由换行符分隔的多个段落之一?

  • 7

说明:使用 GNU sed。

现状 - ~/.screenrc,最后几行:

# name synthpop
# screen -t script emacs -nw /home/$USER/bin/synthpop

# name thrashmetal
# screen -t script emacs -nw /home/$USER/bin/thrashmetal
# number 1
# split -v
# focus
# chdir "/home/$USER/thrashmetal/src"
# screen -t scr watch nl asdkjlek.html
# number 2
# focus
# split
# focus
# screen -t output watch thrashmetal asdkjlek.html
# number 3
# focus
# split
# focus
# chdir "/home/$USER/thrashmetal/plan"
# screen -t soll watch less soll
# number 4
# focus

# name darkwave
# screen -t script emacs -nw /home/$USER/bin/darkwave

目的:

# name synthpop
# screen -t script emacs -nw /home/$USER/bin/synthpop

name thrashmetal
screen -t script emacs -nw /home/$USER/bin/thrashmetal
number 1
split -v
focus
chdir "/home/$USER/thrashmetal/src"
screen -t scr watch nl asdkjlek.html
number 2
focus
split
focus
screen -t output watch thrashmetal asdkjlek.html
number 3
focus
split
focus
chdir "/home/$USER/thrashmetal/plan"
screen -t soll watch less soll
number 4
focus

# name darkwave
# screen -t script emacs -nw /home/$USER/bin/darkwave

我当前的尝试几乎可以完成工作,但一旦出现该行就无法停止,这只是一个新行,没有任何注释符号或字母数字字符:

sed 's+^# \(name thrashmetal\)+\1+;:a;s+# ++;ta' .screenrc

解释、意图:

  • '一系列要做的事情的开始

  • s代替

  • +使用“+”作为分隔符

  • # …逐行浏览,直到找到以“#”开头的行...

  • \(启动组以供稍后反向参考

  • name thrashmetal并继续“名称thrashmetal”

  • \)组结束

  • +\1+仅用组部分替换该行中的第一个匹配项,不带“#”

  • ;然后,从那时起,做另一件事……

  • :a做一个名为“a”的循环

  • ;s对于接下来的每一行,您逐行替换...

  • +设置“+”作为分隔符

  • # 该行中“#”的第一个匹配项,无论该行中其后的内容如何...

  • ++什么都没有,有效地删除它

  • ;ta只要你失败了,就这样做,这应该是当你到达段落末尾,然后是分隔 thrashmetal-block 和 darkwave-block 的 2 个换行符,然后返回到“a”所在的位置

  • '一系列要做的事情的结束

  • .screenrc执行有关我当前目录中的文件“.screenrc”的一系列操作 - 我的主目录

标准输出:

# name synthpop
# screen -t script emacs -nw /home/$USER/bin/synthpop

name thrashmetal
screen -t script emacs -nw /home/$USER/bin/thrashmetal
number 1
split -v
focus
chdir "/home/$USER/thrashmetal/src"
screen -t scr watch nl asdkjlek.html
number 2
focus
split
focus
screen -t output watch thrashmetal asdkjlek.html
number 3
focus
split
focus
chdir "/home/$USER/thrashmetal/plan"
screen -t soll watch less soll
number 4
focus

name darkwave
screen -t script emacs -nw /home/$USER/bin/darkwave

如何解决这个问题?我做错了什么,循环不会在到达 thrashmetal 段落末尾时立即停止,而是简单地跳到下一段(darkwave 段落)并继续?

我猜想,那个循环中的任何东西都一定是错误的……也许是“t”,但“T”或“b”也不会删掉它……

text-processing
  • 4 个回答
  • 206 Views
Martin Hope
futurewave
Asked: 2024-01-23 01:35:46 +0800 CST

监视命令:仅定期更新,而不是基于事件?(示例:每 2 秒 - 每次保存文件 x 时)

  • 4

我想要什么:使用 watch 命令运行命令 y,并且仅在命令 y 的输出发生更改时才更新 watch 命令。

想象一个带有 3 行 echo 输出的 bash 脚本

Hello world!
Hello universe!
Aloha multiverse!

我希望监视 bash 脚本,但只有当所述输出由于编辑脚本并随后保存而发生更改(因此修改日期)时,才应该发生更新。

我担心,像往常一样,默认情况下每 2 秒更新一次的 watch 命令,每天运行多个小时时,会过快地缩短存储磁盘的使用寿命。我的意思是,想象一下该命令会产生多少读/写操作。我觉得这样太浪费了。如果 watch 命令只是休眠,保存监视命令的行为会唤醒 watch,再次运行脚本,然后再次休眠,那就更好了。

我的意思是:自动相当于我们都知道的手工操作:1. 编写脚本,2. 然后保存它,3. 然后再次执行它以查看保存的更改是否按预期运行 - 重复。我的意思是为了看到变化,我们不会每 2 秒执行一次命令,而是基于事件只执行一次。

在编写脚本和执行脚本之间进行自动化的繁琐的不断切换的代价是否是不可避免的不断的间隔更新会因读写进程的过度增长而耗尽存储磁盘的寿命?

折衷方案可能是通过 -n 选项来延长间隔时间,例如每 30 秒一次,但 watch 命令无法以某种方式做得更好吗?

我的意思是,我已经考虑过,一旦文件发生更改,就可以让 watch 通过 -g 选项退出,但这不会改变 watch 上的任何内容,导致每 2 秒或其他间隔进行一次读取操作,直到发生更改,保持存储磁盘一直处于繁忙状态。

while 循环也有同样的问题,不是吗?或者这可能是解决方案:用 while 循环重建 watch 命令,使其真正基于事件(?),从而在开发脚本时最大限度地减少读写操作量?

这是关于效率、极简主义、尽可能节省资源。

watch
  • 1 个回答
  • 43 Views
Martin Hope
futurewave
Asked: 2024-01-22 21:32:53 +0800 CST

存储 bash 脚本生成的半短期数据的最佳位置是什么?

  • 7

我正在开发一个小型 bash 脚本 Y,它计算给定 bash 脚本 X 的行数、字符和文件大小,并将当天第一次运行的结果存储在某个位置。

当 bash 脚本 X 运行额外次数时,它应该将存储的值与新的值检索进行比较,输出更改的内容以及百分比。例如,“文件大小:-12%”表示 bash 脚本 X 自当天第一次运行以来文件大小减小了 12%。

因此,第一次运行的存储数据是相当短暂的,但应该在重新启动后仍然存在。它的保质期应该是 1 天。因此,重新启动或关闭不应终止存储数据的生命周期,但一旦 24 小时过去,下一次运行的 bash 脚本 Y 应该会用新数据覆盖 bash 脚本 X 的旧数据。 bash 脚本 X.

根据 Linux 文件层次结构或文件系统层次标准 (FHS),放置这种特定类型数据的最佳位置是什么?

你看:上述数据是半短暂的;如果它完全是短暂的,它将被撤消,并在每次重新启动或关闭时被覆盖。在这种情况下,毫无疑问 /tmp/ 将是存放脚本生成的数据的合适位置。但话说回来,更持久的情况是,它应该能够在重新启动和关闭后继续存在,但时间窗口不能超过 24 小时?在哪里可以将此类数据放置在 bash 脚本中?我假设 /var 或 /usr/local/... 可能作为基本目录,然后在其中放置一个名为“bash script Y”的自己的子目录...

bash
  • 1 个回答
  • 129 Views
Martin Hope
futurewave
Asked: 2024-01-20 06:49:55 +0800 CST

如何使屏幕命令使用shell“bash”而不是shell“sh”?

  • 5

意识到我的 bash 脚本在开发中需要从第 1 行开始逐行进行彻底测试

开始伴侣终端会话

垂直分屏,左侧 emacs 编辑 bash 脚本,右侧 watch bash 脚本命令,让一侧编辑立即在右侧可见,一目了然 - 结束手动从一个屏幕到另一个屏幕的潮汐切换或工作场所的工作场所

bash脚本,可变块,定义关联数组

*脚本无法正常工作,错误消息'语法错误:“(”意外'*

研究,发现该错误发生,如果Shell无法与关联阵列一起工作 - SH无法做到,Bash可以做到这一点

结束屏幕,返回纯bash,执行bash脚本,目睹它的工作原理

问题:有什么可以做的,以便屏幕命令将依靠shell“ bash”而不是“ sh”?有任何选择导致该开关吗?-shell = bash?基本上,需要什么。


更新

君士坦丁AB是正确的。事实证明:从技术上讲,有必要将Shebang无处不在,但是无论如何,在脚本的第1行中。当然,就在行的开头,使其成为整个文件的第一组字符。并且基本上可能仅在第1行中设置,使其他所有内容都在第2行或更高版本中。

我的错误是,当然,我将Shebang设置为bash-但是在第11行,在第10行征服段之后,而不是第1行。

例子:

前

emacs /tmp/test-script.sh(设置可执行文件,保存如下)

# Super important stuff in need of being mentioned at the top
#!/bin/bash

declare -A asso_array=(
    [var1]=""
    [var2]="Seems to work"
    [var3]="Test"
    [var4]=""
)
echo ${asso_array[@]}

echo "Hello World!"

观看/tmp/test-script.sh

Every 2.0s: /tmp/test-script.sh    Sat Jan 20 14:02:11 2024

/tmp/test-script.sh: 4: /tmp/test-script.sh: Syntax error: "(" unexpected

后

emacs /tmp/test-script.sh(设置可执行文件,保存如下)

#!/bin/bash
# Super important stuff in need of being mentioned at the top

declare -A asso_array=(
    [var1]=""
    [var2]="Seems to work"
    [var3]="Test"
    [var4]=""
)
echo ${asso_array[@]}

echo "Hello World!"

注意:一旦您将 shebang 放入第 1 行,路径终点(在本例中为“bash”)就会突出显示!

观看/tmp/test-script.sh

Every 2.0s: /tmp/test-script.sh    Sat Jan 20 14:05:11 2024

Test Seems to work
Hello World!

因此,吸取教训,回顾一下:

谢邦第一!无论!

这是 bash 脚本的技术必要性。

偏离了,bash 脚本基本上就会失败。

bash
  • 2 个回答
  • 59 Views
Martin Hope
futurewave
Asked: 2024-01-19 17:37:30 +0800 CST

这个“stat [选项]...inode number...”可能吗?

  • 5

是否可以通过将 File1 的索引节点号作为参数而不是文件名传递来stat检索元数据?File1stat

stat [option - any doing this?] [inode number of File1]

代替

stat /home/$USER/File1

我的意思是直接的,而不是使用任何管道和命令替换技巧。

inode
  • 2 个回答
  • 40 Views
Martin Hope
futurewave
Asked: 2023-08-18 04:14:11 +0800 CST

在 bash 中,如何在不使用鼠标的情况下复制显示的文本文件中的 URL?

  • 5

让我带你来一次短暂的旅行:

打开终端。

类型

cat <any text file in your current working directory, containing a URL, at the beginning> | head

该文本文件的前 10 行打印在标准输出上,并显示在屏幕上。

就我而言,它看起来像这样:

(Beginning of line 7)yada yada yada [[https://example-url-1.com][Example URL #1]] - [[https://example-url-2.com][Example URL #2]] yada yada yada (End of line 7)

两个链接位于第 7 行的中间,被文本包围,而不是单独位于该行中。

现在是测验问题:如何仅将 URL #2 复制到内存中,以便在不使用鼠标的情况下将其粘贴到另一个程序中?

在 GNU emacs 中?超级简单:搜索“ht” - 光标跳转到链接开头,CM SPC,链接被标记,Mw,标记的部分被复制。但在bash中呢?

bash
  • 5 个回答
  • 86 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