标签: bash

用于存储键入的命令并清理行的键盘快捷键

您知道这种情况:您正在输入一条长命令(例如提交消息)的一半,并意识到您忘记执行一些无法添加的先决条件命令&&。通常,当我遇到这种情况时,我会选择我用鼠标键入的内容,将其复制到剪贴板,按 Ctrl-U 清除该行,运行我的先决条件命令并从剪贴板粘贴。但也许有更好的方法,最好不需要使用鼠标?我正在寻找 bash 和/或 zsh 的解决方案。

bash command-line-interface zsh

12
推荐指数
3
解决办法
1211
查看次数

SED 跨多行替换

我试图找到这三行:

<!--
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
-->
Run Code Online (Sandbox Code Playgroud)

并将它们替换为:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
Run Code Online (Sandbox Code Playgroud)

当我尝试

sudo sed -i 's:<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->:<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />:' /myfile.xml
Run Code Online (Sandbox Code Playgroud)

它没有找到它,我也尝试将 \n 放入其中,但它仍然不起作用:

sudo sed -i 's:<!--\n <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />\n -->:<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />:' /myfile.xml
Run Code Online (Sandbox Code Playgroud)

这些不会引发任何错误,只是不会取消注释该行。任何建议都会有所帮助谢谢!

linux bash sed

12
推荐指数
2
解决办法
2万
查看次数

在 shell 脚本级别限制文件大小 (stdout) 的简单方法?

好的,从我的角度来看,这是一个非常实用的用例。

假设我有一个简单的 shell oneliner,它将输出记录到一个文件中。这可以是任何东西,例如 tcpdump。是否有任何通用和简单的方法来确保输出文件不会超过给定的大小?

这背后的共鸣是防止错误地填充安装点上的整个可用空间。如果我忘记了脚本,或者它每小时会产生 GB 的数据,那么这个简单的调试任务可能会导致潜在的系统崩溃。

现在,我知道一些工具中内置的选项(例如 tcpdump 中 -W/-C 的组合)。我需要的是一个非常通用的故障保护。

长话短说 - 当我运行一个脚本时:

% this -is --my=very|awsome|script >> /var/tmp/output.log
Run Code Online (Sandbox Code Playgroud)

如何确保 output.log 永远不会超过 1GB。

脚本可能会崩溃、被杀死或其他什么。

我正在寻找的解决方案应该简单易行,仅使用流行发行版(如 ubuntu/debian/fedora)中可用的工具。一般来说,一些广泛可用的东西。无论语言/技术如何,复杂的多行程序都不是这里的选择。

bash

12
推荐指数
1
解决办法
2万
查看次数

shell 脚本可以等待文件更改并采取行动吗?

我想知道是否可以编写一个脚本来监视文件中的更改并在检测到更改时执行某些操作。

详细解释:

  1. OpenVPN 每 1 分钟将其状态写入一个文件。
  2. 我需要解析这个状态文件并采取行动。
  3. OpenVPN 在写入之前截断状态文件。
  4. 我尝试写入命名管道,但是当应用程序未能截断管道时,我在应用程序中遇到了不希望的(但不是致命的)错误。

linux bash openvpn shell-scripting

12
推荐指数
1
解决办法
4698
查看次数

如果正文不为空,则从命令行发送邮件

我想编写一个简单的脚本,在日志更改时提醒我。为此,我使用 grep 来查找我感兴趣的行。现在它是这样工作的:

grep line /var/log/file | mail -s Log email@domain.tld
Run Code Online (Sandbox Code Playgroud)

问题是即使没有找到匹配的行,这也会发送邮件。mailutils 的邮件实用程序似乎没有开关告诉它丢弃正文为空的邮件。

有没有一种快速简便的方法呢?

email bash command-line-interface cron

12
推荐指数
2
解决办法
1万
查看次数

如何通过删除 bash 中的字符来重命名多个文件?

我必须通过删除每个文件名的前 5 个字符来重命名目录中的多个文件。
我怎样才能做到这一点我 bash/shell?我正在使用 Ubuntu 11.10。谢谢。

bash rename

11
推荐指数
4
解决办法
3万
查看次数

CPAN 和 Perl 模块的静默和脚本安装?

我需要在 Scientific Linux (RHEL) 安装脚本中自动安装 CPAN 和一些 Perl 模块。不幸的是,就我所见,我想要的特定模块(至少其中一个)无法作为 RPM:s 找到。

所以我需要安装 CPAN,自动配置它(或使用配置文件),然后自动安装所需的模块(包括依赖项)。

这似乎不是一个非常不寻常的要求,但我还没有看到任何关于此的非常好的文档。问题是,每当第一次启动 CPAN 时,都会运行交互式配置。这可以以某种方式跳过吗?以及如何直接从命令行启动模块安装?

bash perl cpan shell-scripting

11
推荐指数
4
解决办法
1万
查看次数

我可以更改特定用户的所有文件的所有权吗?

有没有办法递归地查找用户拥有的所有文件并将它们更改为 Gnu/Linux 中的另一个用户/组?

我认为一定有一些神奇的单线,但我的命令行巫术技能达不到那个程度:)

谢谢!

linux shell bash centos shell-scripting

11
推荐指数
2
解决办法
1万
查看次数

用于检查公共 HTTPS 站点是否已启动的 Bash 脚本

我正在尝试为 bash 脚本设置另一个代码块,以检查 HTTPS 上的公共网站是否已启动。我们可以使用 CURL 来做到这一点吗?除了 CURL 之外,还有什么可以使用的建议。谢谢

linux bash

11
推荐指数
2
解决办法
4万
查看次数

尝试在 Debian 中执行启动脚本时没有此类文件或目录错误

Debian(Raspbian)的新手,我在这个问题上挣扎了几天。我有一个要在启动时执行的启动脚本。

我执行了以下命令,以使脚本可执行并将其与默认参数一起添加到启动序列中。

sudo chmod 755 /etc/init.d/testsam
sudo update-rc.d testsam defaults
Run Code Online (Sandbox Code Playgroud)

尝试测试脚本时,我执行以下操作:

sudo /etc/init.d/testsam start
Run Code Online (Sandbox Code Playgroud)

但是这样做时,我收到一个错误:无法执行 /etc/init.d/testsam: No such file or directory。

我将脚本最小化为非常基本的,但仍然不知道实际原因。我希望有人能指出我正确的解决方案?这是当前的脚本。

#! /bin/bash

# /etc/init.d/testsam

case "$1" in
 start)
        #echo "starting script"
        ;;
 stop)
        #echo "stopping script"
        ;;
 *)
        #echo "Usage: /etc/init.d/testsam {start|stop}"
        exit 1
         ;;
esac

exit 0
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

debian bash startup-scripts

11
推荐指数
1
解决办法
3万
查看次数