我想让用户在 Thunar 或 Dolphin 中将 ISO 写入 USB 笔式驱动器。
为此,我创建了一个使用 dd、pv 和 zenity 的 bash 脚本。
目前我正在使用 pkexec 在执行 dd 命令之前询问密码,但是 pkexec 窗口和 zenity 进度窗口同时打开。我想先打开一个 root 密码窗口,然后再打开 zenity 进度窗口。
我尝试先用 zenity 询问密码,然后将密码通过管道传输到 sudo,但是无论我把“echo $PWD”放在哪里,密码都不会通过管道传输到 sudo。
#!/bin/bash
TITLE='Zenity Progress Test'
PASSWORD=$(zenity --password \
--width=300 \
--title="$TITLE")
if [ ! -z "$PASSWORD" ]; then
echo "Your password: $PASSWORD"
dd if=/dev/zero of="$PWD/testfile1" bs=1M count=100
pv -n testfile1 2> >(zenity --progress \
--width=300 \
--title="$TITLE" \
--percentage=0 \
--auto-close \
--auto-kill) | echo "$PASSWORD" | sudo -S dd of="$PWD/testfile2" bs=64k oflag=dsync
echo "$PASSWORD" | sudo -S rm "$PWD/testfile1" "$PWD/testfile2"
else
echo 'No password provided'
exit 1
fi
zenity 进度窗口只是一闪而过,没有传输任何内容,很可能是因为密码没有通过管道传输到 sudo。
如果将“echo $PASSWORD | sudo -S”替换为“pkexec”,代码会起作用,但 pkexec 窗口和 zenity 进度窗口同时打开。
关于如何解决这个难题的任何想法?