因此,我尝试将 7GB 映像刷入 SD 卡,这需要很长时间(例如 15 个小时以上),因此我决定进行设置pv
以便查看进度。我遇到的问题是,一旦我输入命令,进度报告就会弹出,妨碍密码提示,因此我无法继续传输。我该如何解决这个问题?
这是我一直在使用的代码。
首先我尝试了这个:
sudo dd if=diskimage.img | pv -s 7340M | sudo dd of=/dev/disk2 bs=64k
我一按回车键,进度就会弹出,所以密码提示框里会填入该文本。我想知道这是否与dd
在输出端使用 sudo 有关,因为在不使用时我不需要这样做pv
,但我见过的所有示例都是这样做的。
然后我尝试省略 size 修饰符,但仍然发生这种情况。最后我放弃了,只是重新使用dd
without ,并使用-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 dd
和pv
所有命令都同时启动。
两个都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