标签: bash

Bash 循环 - 在命令中按 Control-C 时如何停止循环?

我正在同步几个目录。我打开了一个 bash 终端,正在执行如下操作:

for DIR in * ; do rsync -a $DIR example.com:somewhere/ ; done
Run Code Online (Sandbox Code Playgroud)

但是,如果我想停止这一切,我按 Control-C。这会停止 rsync,但它会继续进行下一个。在这种情况下,我意识到发生了什么,然后像疯子一样按下 Control-C,直到一切恢复正常。

有什么方法可以“解决”这个问题。我想要它,所以如果我有一个这样的循环,然后按 Control-C,它会将我返回到我的 bash shell。

linux unix bash command-line-interface job-control

45
推荐指数
5
解决办法
3万
查看次数

我如何要求 screen 表现得像一个标准的 bash shell?

刚刚了解了 linux 上的 screen 命令 - 它是天才。我喜欢它。但是,屏幕中的实际终端/提示的外观和行为与我的标准 bash 提示不同。也就是说,颜色不一样,选项卡完成似乎不起作用等。

有没有一种方法可以让 screen 表现得像一个正常的(至少,像我习惯的那样正常)bash 提示?

附加信息

我通过 ssh 从 Mac(终端)连接到无头 linux 机器(Ubuntu)。登录后,我有TERM=xterm-color,当我运行 screen 我有TERM=screen

我将尝试下面的建议,看看我是否可以先更改该$TERM值。

bash gnu-screen xterm

42
推荐指数
5
解决办法
4万
查看次数

确定文件系统或分区是通过 Bash 脚本挂载 RO 还是 RW?

是否有一种简单的方法可以确定已挂载的文件系统是挂载为只读还是读写?我想只是管,mount但我认为可能有更简单的方法。

linux bash mount

41
推荐指数
4
解决办法
16万
查看次数

在 bash 中运行命令而不保存在历史记录中

如何在 bash 中运行命令而不将其保存在历史记录中?

linux bash

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

为什么将“脚本”重定向到 /dev/null/ 允许“屏幕”在作为另一个用户使用时工作?

我被说服了一个用户来运行一个特定的长时间运行的脚本。我想使用 screen 但我收到错误消息“无法打开您的终端 '/dev/pts/4' - 请检查。”

所以我在谷歌上搜索并发现了一个论坛帖子,指示运行$ script '/dev/null/'. 我这样做了,然后我就可以筛选了。

为什么这样做?su 在做什么,该屏幕无法以 su 用户身份运行?为什么将“脚本”重定向到 /dev/null 否则会被阻止?是否使用脚本将原始用户的日志写入某处?

linux su bash gnu-screen

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

从 bash 命令输出创建“虚拟文件”?

我想知道是否有办法从 bash 输出创建“虚拟文件”。

示例:假设我想将 的输出mysqldump作为附件通过电子邮件发送到外部电子邮件地址。我可以使用 Mutt 来做到这一点。mutt我需要使用的选项是-a <name of the file I want to attach>. 我知道我可以使用一个临时文件:

mysqldump mysqldumpoptions > /tmp/tempfile && mutt -a /tmp/tempfile admin@example.org
Run Code Online (Sandbox Code Playgroud)

但我宁愿将mysqldump输出直接重定向到 Mutt。Mutt 的-a选项只接受一个文件而不是一个流,但也许有一种方法可以将某种虚拟文件描述符或类似的东西传递给它。就像是:

mutt -a $(mysqldump mysqldumpoptions) admin@example.org
Run Code Online (Sandbox Code Playgroud)

是否可以?如果不是,为什么?

这可能是一个愚蠢的例子,肯定有更简单的方法来做到这一点,但我希望它能解释我关于从另一个命令的输出创建虚拟文件的问题。

bash redirection

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

避免将命令保留在历史中

我使用 bash,我想避免将某些命令保留在历史记录中。

  • 是否可以仅对下一个命令执行此操作?
  • 是否可以在整个会话中都这样做?

security bash command-line-interface history

38
推荐指数
3
解决办法
4894
查看次数

从 find 命令输出中删除路径

我有一个 bash 脚本,用于将代码从 beta 环境部署到生产环境,但目前我必须手动将文件列表添加到 txt 文件中,有时我会错过一些。基本上我的部署脚本 cat/loops 复制文件。(导出/导入数据库也是如此,但这无关紧要..lol)

无论如何,我想使用该find命令生成过去 14 天内修改的文件列表。问题是我需要删除路径./才能使部署脚本正常工作。

以下是 find 命令用法的示例:

找 。-type f -mtime -14 > deploy.txt

这是deploy.txt我的部署脚本中的猫行:

for i in `cat deploy.txt`; do cp -i /home/user/beta/public_html/$i /home/user/public_html/$i; done
Run Code Online (Sandbox Code Playgroud)

知道如何使用 bash 脚本来实现这一点吗?

谢谢!

bash find

38
推荐指数
4
解决办法
8万
查看次数

ulimit -n 和 /proc/sys/fs/file-max 有何不同?

我注意到在我刚从 EC2 启动的新 CentOS 映像上,ulimit 默认值是 1024 个打开的文件,但是 /proc/sys/fs/file-max 设置为 761,408,我想知道这两个限制是如何工作的一起。我猜 ulimit -n 是每个用户的文件描述符数量限制,而 /proc/sys/fs/file-max 是系统范围的?如果是这种情况,假设我已经以同一用户身份登录了两次——每个登录用户的打开文件数是否有 1024 个限制,或者每个登录的用户之间是否有 1024 个组合打开文件的限制——在用户?

如果您的系统从未打开过很多文件,那么将最大文件描述符设置为非常高的数字是否会对性能产生很大影响?

linux bash kernel ulimit

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

在 PuTTY 和屏幕上使用 ctrl-箭头键

我搜索过,但在任何地方都找不到解决方案。我正在使用 Windows 中的 PuTTY 连接到运行 bash 和 screen 的各种服务器。bash 似乎可以使用 ctrl-arrow 键在命令行上逐字跳转,但在屏幕内它不起作用。不在屏幕中,ctrl-left 发送“^[OC”,ctrl-right 是“^[OD”。在屏幕中,我得到了“^[[C”和“^[[D”,这似乎只是左/右箭头键。有没有办法让屏幕在使用 PuTTY 时识别 ctrl 箭头键?(仅供参考,我不记得在 linux 中使用 gnu-terminal 而不是 PuTTY 时有这个问题)。

更新:看来 PuTTY 是问题所在,因为它没有发送使其工作所需的转义码。我现在放弃并使用 Cygwin+mintty。

bash putty gnu-screen

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