小编kar*_*sss的帖子

如何在同一个管道中读写同一个文件总是“失败”?

假设我有以下脚本:

#!/bin/bash
for i in $(seq 1000)
do
    cp /etc/passwd tmp
    cat tmp | head -1 | head -1 | head -1 > tmp  #this is the key line
    cat tmp
done
Run Code Online (Sandbox Code Playgroud)

在关键线上,我读取和写入tmp有时会失败的同一个文件。

(我读它是因为竞争条件,因为管道中的进程是并行执行的,我不明白为什么 - 每个人都head需要从前一个中获取数据,不是吗?这不是我的主要问题,但你也可以回答。)

当我运行脚本时,它输出大约 200 行。有什么办法可以强制这个脚本总是输出 0 行(所以 I/O 重定向tmp总是首先准备好,所以数据总是被破坏)?明确地说,我的意思是更改系统设置,而不是这个脚本。

谢谢你的想法。

bash process pipe io-redirection

9
推荐指数
2
解决办法
3560
查看次数

Bash - 在没有 /dev 和 /proc 的情况下在 chroot 中进行进程替换

我有一个chroot监狱没有/dev/proc安装。当我尝试在这里进行流程替换时,会发生这种情况:

bash-4.4# cat <(ls)   
cat: open /dev/fd/63: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我尝试/dev/fd手动创建并确保所有用户都有足够的权限,但没有帮助。

有没有什么办法可以让我在不从外部系统安装任何东西的情况下让它工作?

bash chroot process-substitution

6
推荐指数
1
解决办法
906
查看次数

确定用户的主目录

我需要知道如何确定 linux 用户的主目录。每个人的答案都会是“嘿,看看/etc/passwd并找出它”。但这似乎并不总是正确的。看这个:

$ whoami
test
$ cat /etc/passwd
test:x:2000:2000::/home/test:/bin/bash  (relevant line)
$ echo ~
/root
$ cd
bash: cd: /root: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我真的不知道发生了什么。这是我以 root 身份输入的子系统chroot --userspec=test path/to/subsystem/ /bin/bash。有谁知道这是什么,以及如何解决它,这样~膨胀到/home/testcd作品如预期?

chroot users home

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