小编Joa*_*ela的帖子

sudo -u username -s "cmd arg" 返回命令未找到

我用来执行命令:

sudo -u elasticsearch -s "ulimit -Hn"
Run Code Online (Sandbox Code Playgroud)

并且它返回用户 elasticsearch 看到的 ulimit -Hn 的值,直到我在 Ubuntu 11.10 上尝试它。在那里它返回:

/bin/bash: ulimit -Hn: command not found
Run Code Online (Sandbox Code Playgroud)

我尝试了几个不同的命令,当我使用参数时,我总是得到“找不到命令”:

$ sudo -u elasticsearch -s "ls all.sh"
/bin/bash: ls all.sh: command not found
Run Code Online (Sandbox Code Playgroud)

关于如何执行需要参数的命令的任何想法sudo

sudo quoting

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

将我的凭据从 ssh 会话传递到另一个 ssh 会话

我想使用我在 A 中拥有的特定私钥从 A ssh 到 B。然后我想使用我用于 ssh 到 B 的相同凭据从 B ssh 到 C。

是否可以将凭证从 ssh 会话“传递”到在第一个会话中启动的另一个 ssh 会话?

ssh

9
推荐指数
1
解决办法
3485
查看次数

如何在可执行文件被杀死时自动删除目录

很多时候,我们运行一个需要写入/读取一些临时文件的可执行文件。我们通常创建一个临时目录,在那里运行可执行文件,并在脚本完成后删除该目录。

即使可执行文件被杀死,我也想删除该目录。我试图将它包装在:

#!/bin/bash
dir=$(mktemp -d /tmp/foo.XXXXXXX) && cd $dir && rm -rf $dir
/usr/local/bin/my_binary
Run Code Online (Sandbox Code Playgroud)

my_binary死掉时,内核将删除该目录的最后一个进程,因为脚本是持有该目录的最后一个进程inode;但我无法在删除的目录中创建任何文件。

#!/bin/bash
dir=$(mktemp -d /tmp/foo.XXXXXXX) && cd $dir && rm -rf $dir
touch file.txt
Run Code Online (Sandbox Code Playgroud)

产出 touch: file.txt: No such file or directory

我能想到的最好方法是在进程终止时删除临时目录,捕获最常见的信号,并使用 cron 运行清理进程:

#!/bin/bash
dir=$(mktemp -d /tmp/d.XXXXXX) && cd "$dir" || exit 99
trap 'rm -rf "$dir"' EXIT
/usr/local/bin/my_binary
Run Code Online (Sandbox Code Playgroud)

有没有一些简单的方法来创建一个真正的临时目录,无论发生什么,当当前二进制文件死亡时都会自动删除该目录?

bash files

9
推荐指数
1
解决办法
5367
查看次数

标签 统计

bash ×1

files ×1

quoting ×1

ssh ×1

sudo ×1