标签: bash

如何为“ls -l”创建系统范围的别名?

我想拥有

alias ll="ls -l"
Run Code Online (Sandbox Code Playgroud)

是系统范围的。

这在 Ubuntu 上是如何完成的?

linux ubuntu bash

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

从 shell 脚本运行 ssh-agent

我正在尝试创建一个 shell 脚本,其中包括启动 ssh-agent 并向代理添加私钥。例子:

#!/bin/bash
# ...
ssh-agent $SHELL
ssh-add /path/to/key
# ...
Run Code Online (Sandbox Code Playgroud)

问题在于 ssh-agent 显然启动了 $SHELL 的另一个实例(在我的情况下是 bash),从脚本的角度来看,它执行了所有内容,而 ssh-add 及其下面的任何内容都不会运行。

如何从我的 shell 脚本运行 ssh-agent 并让它在命令列表中继续移动?

ssh shell bash ssh-agent shell-scripting

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

Ansible 是否会阻止在 shell 脚本中执行“rm -rf /”

这是基于这里的这个恶作剧问题。所描述的问题是有一个 bash 脚本,其中包含以下内容:

rm -rf {pattern1}/{pattern2}
Run Code Online (Sandbox Code Playgroud)

...如果两种模式都包含一个或多个空元素rm -rf /,则假设原始命令被正确转录并且 OP 正在进行大括号扩展而不是参数扩展,则将扩展为至少一个实例。

在 OP对骗局解释中,他说:

命令 [...] 是无害的,但似乎几乎没有人注意到。

Ansible 工具可以防止这些错误,[...] 但是 [...] 似乎没有人知道这一点,否则他们就会知道我所描述的不会发生。

因此,假设您有一个rm -rf /通过大括号扩展或参数扩展发出命令的 shell 脚本,使用Ansible是否会阻止该命令被执行,如果是这样,它是如何做到的?

rm -rf /只要您使用 Ansible 来执行,以 root 权限执行是否真的“无害”?

linux bash rm ansible

23
推荐指数
1
解决办法
5260
查看次数

如何在 Mac OS X 上的 shell 脚本中检索绝对文件名?

我想检索当前执行的脚本文件的绝对文件名。链接也应该解决。

在 Linux 上,这似乎是这样完成的:

$(readlink -mn "$0")
Run Code Online (Sandbox Code Playgroud)

readlink似乎工作非常不同的Mac OS X上

我读过这是使用

$(realpath $0)
Run Code Online (Sandbox Code Playgroud)

在 BSD 中,但这也不起作用。Mac OS X 没有realpath.

任何的想法?

shell bash mac-osx

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

Linux Bash 语法:&&、\ 和 - 的含义

bash 命令末尾的“ &&”、“ \” 和“ -” 是什么意思?

特别是,我遇到了以下应该将公钥添加到 Ubuntu 的 aptitude 包管理器的行组合,这些字符在这里用于什么?

    gpg --keyserver keyserver.ubuntu.com --recv 26C2E075 && \
    gpg --export --armor 26C2E075 | sudo apt-key 添加 - && \
    sudo apt-get 更新

linux bash

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

杀死一个屏幕(但不是所有的屏幕)

我在 Ubuntu 服务器上运行了多个屏幕,这些屏幕启动为:

screen -dmS screen1 cmd
screen -dmS screen2 cmd
etc...
Run Code Online (Sandbox Code Playgroud)

我需要杀死一个屏幕,但不是全部。用其名称杀死单个特定屏幕的正确命令是什么?我已经阅读了手册页,但似乎找不到我正在寻找的命令。

此外,我想将此命令写入 bash 脚本中,因此我不能像往常一样简单地screen -r screen1Ctrl+ X

bash kill gnu-screen

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

注销时后台进程是否会收到 SIGHUP?

这是这个问题的后续。

我还进行了一些测试;看起来这是在物理控制台上完成还是通过 SSH 完成并不重要,这也不仅仅发生在 SCP 上;我也用cat /dev/zero > /dev/null. 行为完全相同:

  • 在后台使用启动一个进程&(或者在它开始使用后把它放在后台使用CTRL-Zand bg);这是在不使用nohup.
  • 注销。
  • 重新登录。
  • 进程还在那里,愉快地运行着,现在是init.

如果发送,我可以确认 SCP 和 CAT 都立即退出SIGHUP;我使用kill -HUP.

因此,看起来 SIGHUP 确实不会在注销时发送,至少不会发送到后台进程(由于显而易见的原因,无法使用前台进程进行测试)。

这发生在我最初使用 VMware ESX 3.5(基于 RedHat)的服务控制台时,但我能够在 CentOS 5.4 上完全复制它。

问题再次出现:是否应该在注销时将 SIGHUP 发送到进程,即使它们在后台运行?为什么这没有发生?


编辑

strace根据凯尔的回答,我检查了。
正如我所期望的那样,从启动它的 shell 注销时,该进程没有收到任何信号。在使用服务器的控制台和通过 SSH 时都会发生这种情况。

linux bash signals process

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

bash 脚本中的 Ctrl-C

如何在 bash 脚本中实现ctrl+c处理,从而中断脚本,以及脚本启动的当前正在运行的命令?

(想象一下,有一个脚本可以执行一些长时间运行的命令。用户点击ctrl+c并中断命令,但脚本继续运行。)我需要它的行为方式使他们都被杀死。

bash shell-scripting

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

使用自动脚本设置时区

我正在编写脚本来自动设置新的 slicehost 安装。在一个完美的世界中,在我启动脚本后,它会运行,而不会引起我的注意。我成功了,只有一个例外。

我如何设置时区,永久(重新启动后幸存)和理智(调整标准和夏令时,所以不只是强制日期)......不需要我输入的方式?

目前,我正在使用

 dpkg-reconfigure tzdata
Run Code Online (Sandbox Code Playgroud)

这似乎没有任何方法可以强制参数进入它。它需要用户输入。


编辑:我在这里编辑,而不是评论,因为评论似乎不允许代码块。

这是我最终得到的实际代码,基于下面 Rudedog 的评论。我还注意到这不会更新 /etc/timezone.conf 。我不确定谁在使用它,但如果有人使用它,我也会设置它。

TIMEZONE="America/Los_Angeles"      
echo $TIMEZONE > /etc/timezone                     
cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime   # This sets the time
Run Code Online (Sandbox Code Playgroud)

scripting linux debian bash timezone

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

是否有只是阻塞的设备文件?

...类似于 /dev/null 的东西,但只是阻止写入它的所有字节?

我需要的是通过阻止其输出将任意可执行文件保存在内存中的技巧。管道似乎不可用,因为输出首先写入缓冲区。

linux bash cygwin

21
推荐指数
1
解决办法
399
查看次数