标签: bash

我如何编写 mkfs 脚本询问“是整个设备,而不仅仅是一个分区!仍然继续?”

我正在尝试创建一个格式化 Amazon EC2 EBS 卷的脚本,以便我可以挂载它。

从命令行看,它看起来像这样:

> mkfs -q -t ext4 /dev/sdf
/dev/sdf is entire device, not just one partition!
Proceed anyway? (y,n) 
Run Code Online (Sandbox Code Playgroud)

(命令是正确的;不需要为我的目的创建分区表)

我的问题:因为这个命令应该在一个自动化脚本中运行,所以我不能在终端上问这个问题;没有人会接听,脚本将挂起。我如何避免这种情况?

我试过:

> echo y | mkfs -q -t ext4 /dev/sdf
Run Code Online (Sandbox Code Playgroud)

但这并不能解决问题。-q 选项也没有区别。

linux bash amazon-ec2

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

第一次通过脚本运行 ssh-copy-id 时回答“是”?

第一次ssh-copy-id会问

# ssh-copy-id -i .ssh/id_dsa.pub backup@example.com
The authenticity of host 'example.com (xxx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is 39:fb:5e:70:30:33:2b:18:17:e9:4f:2f:91:b5:d2:21.
Are you sure you want to continue connecting (yes/no)? 
Run Code Online (Sandbox Code Playgroud)

是否可以编写此脚本,因此脚本只会回答是?

linux ubuntu bash centos

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

可以忽略“su”命令中的用户 shell?

如果我做

su - -c 'mkdir bin' user1
Run Code Online (Sandbox Code Playgroud)

然后我得到

su: /usr/bin/ksh: No such file or directory
Run Code Online (Sandbox Code Playgroud)

因为用户 shell 设置为kshin/etc/passwd并且ksh未安装。

在这种情况下,如何以用户身份执行命令?

linux ubuntu bash centos

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

符号链接和 sudo

我创建了一个符号链接:

ln -s /tmp/folder1 /tmp/folder2

然后我去 /tmp/folder2 并运行pwd

$ cd /tmp/folder2/
$ pwd
/tmp/folder2
$ sudo pwd
/tmp/folder1 # <-- This is the odd part
Run Code Online (Sandbox Code Playgroud)

为什么pwdwithsudo给了原目录?我正在编写一个 bash 脚本,需要当前目录的绝对路径。使用 sudo 我似乎无法获得原始目录。

shell bash sudo symbolic-link

10
推荐指数
2
解决办法
3378
查看次数

查找目录,其中缺少具有特定结尾的文件

我想显示所有目录,不包含具有特定文件结尾的文件。因此我尝试使用以下代码:

find . -type d \! -exec test -e '{}/*.ENDING' \; -print
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我想显示所有不包含结尾的文件的目录.ENDING,但这不起作用。

我的错误在哪里?

linux shell bash

10
推荐指数
2
解决办法
1708
查看次数

如何在 bash 中同时使用 ssh 和 sudo?

我一直无法找到描述此特定场景的问题。

我正在尝试执行一个非常基本的 bash 脚本来检索多台机器的日志记录。我在本地运行脚本,但需要通过 ssh 访问外部机器,以及在该机器上 sudo 进入特权用户...

ssh myuser@machine.net
sudo su  - privledged_user
cat logs > file.txt
Run Code Online (Sandbox Code Playgroud)

使用 sh -x 运行它会显示 bash 卡在“ssh”行上。所以我尝试将其修改为:

ssh myuser@machine.net sudo su - privledged_user cat logs > file.txt
Run Code Online (Sandbox Code Playgroud)

这似乎也无限期地停滞了。这个问题有没有更好的解决办法??据我所知,我看不到使用 sudo su 的方法......

谢谢你的帮助!

linux bash

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

这个变量转义如何在 systemd 单元文件中工作?

我有一个相当简单的单元文件,用于我在 CoreOS 上运行的服务器实例的发现助手服务。单元文件如下所示:

[Unit]
Description=Discovery for frontend server (instance %i)
BindsTo=frontend@%i.service
After=frontend@%i.service

[Service]
EnvironmentFile=/etc/environment
ExecStart=/usr/bin/bash -c ' \
    while true; do \
        export PORT=$(docker port frontend%i 80 | sed s/.*://); \
        etcdctl set /services/frontend/%i "${COREOS_PRIVATE_IPV4}:$PORT" --ttl 60; \
        sleep 45; \
    done'
ExecStop=/usr/bin/etcdctl rm /services/frontend/%i

[X-Fleet]
MachineOf=frontend@%i.service
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我花了很长时间才到达这个阶段,因为如果我将etcdctl行更改为:

etcdctl set /services/frontend/%i "${COREOS_PRIVATE_IPV4}:${PORT}" --ttl 60; \
Run Code Online (Sandbox Code Playgroud)

然后它不起作用 - 它最终设置了一个100.45.218.3:没有端口的值。一路上,我花了很多时间玩弄$PORT变量的不同用途,但我不知道为什么我选择的配置有效。有一次我在脚本中有这个:

echo hi $PORT; \
echo "hi $PORT"; \
echo hi ${PORT}; \
echo "hi ${PORT}"; \ …
Run Code Online (Sandbox Code Playgroud)

bash systemd coreos

10
推荐指数
1
解决办法
5010
查看次数

为什么在主管中使用`bash -c`而不是直接调用脚本?

我开始使用supervisord控制服务器中的服务。我不是 linux 的专业用户,但可以很好地使用它并让它运行。

出于好奇,我注意到 supervisord 中的大多数命令似乎都被称为:

[program:install]
command=bash -c "/src/etc/install.sh"
Run Code Online (Sandbox Code Playgroud)

我已经阅读了 bash 的 man,并且知道-c应该使用它来插入在字符串之后传递的变量。

那么bash -c考虑到没有传递/使用变量,在主管(或任何其他地方)中使用而不是直接调用脚本(如下例所示)有什么意义?

[program:install]
command=/src/etc/install.sh
Run Code Online (Sandbox Code Playgroud)

谢谢!

linux bash supervisord

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

如果文件不存在,则 Bash one-liner 以原子方式创建文件

我想要一个 Bash one-liner,如果文件不存在,它会自动创建一个文件。这基本上意味着“如果文件不存在,则创建它”,但要确保没有其他人设法在执行 if 和创建文件之间的小空间中创建文件。

files bash

10
推荐指数
1
解决办法
3402
查看次数

在生产中自动优雅地重新加载 gunicorn

我有一个自动部署工作流,可以将代码推送到我的生产服务器并触发数据库迁移、静态文件更新等。问题是,没有开发选项--reload,gunicorn 不会自动重新加载代码更改,他们建议不要在生产中使用。相反,则指令的发送HUP信号到masterpid。问题是,我不知道如何masterpid在自动脚本中检索,尽管手动操作很容易。

如何materpid在 bash 脚本中检索gunicorn systemd 进程的值?

deployment bash shell-scripting gunicorn

10
推荐指数
1
解决办法
2914
查看次数