pv 进程中断密码

pv 进程中断密码

因此,我尝试将 7GB 映像刷入 SD 卡,这需要很长时间(例如 15 个小时以上),因此我决定进行设置pv以便查看进度。我遇到的问题是,一旦我输入命令,进度报告就会弹出,妨碍密码提示,因此我无法继续传输。我该如何解决这个问题?

这是我一直在使用的代码。

首先我尝试了这个:

sudo dd if=diskimage.img | pv -s 7340M | sudo dd of=/dev/disk2 bs=64k

我一按回车键,进度就会弹出,所以密码提示框里会填入该文本。我想知道这是否与dd在输出端使用 sudo 有关,因为在不使用时我不需要这样做pv,但我见过的所有示例都是这样做的。

然后我尝试省略 size 修饰符,但仍然发生这种情况。最后我放弃了,只是重新使用ddwithout ,并使用-pv检查进度,但我真的很想开始工作。ctrltpv

非常感谢您的任何帮助。

顺便说一句,当我使用ctrl-t这些是我得到的结果。(负载来自使用ctrl- t

sudo dd if=diskimage.img of=/dev/disk2 bs=64k

load: 1.09  cmd: dd 906 uninterruptible 0.00u 0.17s
176+0 records in
175+0 records out
11468800 bytes transferred in 37.236996 secs (307995 bytes/sec)

load: 0.60  cmd: dd 906 uninterruptible 0.01u 3.92s
4573+0 records in
4572+0 records out
299630592 bytes transferred in 2322.619605 secs (129005 bytes/sec)

答案1

由于管道周围的命令同时启动,因此两个命令sudo ddpv所有命令都同时启动。

两个都sudo dd在要求输入密码并且pv同时开始扣动扳机,因此提示变成了垃圾。

为了解决这个问题,您可以使用bash命令分组并仅sudo在以下情况下使用bash

sudo bash -c '{ dd if=diskimage.img | pv -s 7340M | dd of=/dev/disk2 bs=64K ;}'

或者使用子 shell:

sudo bash -c '( dd if=diskimage.img | pv -s 7340M | dd of=/dev/disk2 bs=64K )'

在这两种情况下,您都会被提示sudo输入一次密码,并且不需要其他形式的用户切换。

答案2

解决方案很简单,在运行命令之前先成为 root,因为 sudo 无论如何都不会通过管道传输。所以你的解决方案是这样的:

# become root
sudo su
# do your stuff
dd if=diskimage.img | pv -s 7340M | dd of=/dev/disk2 bs=64k
# get back to your normal user account
exit

相关内容