我想让用户从Thunar或Dolphin内部将ISO写入USB随身碟。
为此,我创建了一个使用dd,pv和zenity的bash脚本。
当前,我在执行dd命令之前使用pkexec要求输入密码,但是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进度窗口。
关于如何解决这个难题的任何想法?
答案 0 :(得分:0)
使用param -S从stdin中读取
$echo <password> | sudo -S <command>