【问题标题】:How to pipe password to sudo with zenity, pv and dd如何使用 zenity、pv 和 dd 将密码传送到 sudo
【发布时间】:2023-03-09 19:26:01
【问题描述】:

我想让用户在 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 进度窗口同时打开。

关于如何解决这个难题的任何想法?

【问题讨论】:

    标签: bash sudo dd zenity pv


    【解决方案1】:

    使用参数 -S 从标准输入读取

    $echo <password> | sudo -S <command>
    

    【讨论】:

    • 这就是我在 OP 中描述的那样:"echo "$PASSWORD" | sudo -S dd"
    猜你喜欢
    • 1970-01-01
    • 2011-11-08
    • 2012-12-09
    • 2019-03-24
    • 2017-11-24
    • 1970-01-01
    • 2021-09-16
    • 2012-03-31
    • 2018-10-17
    相关资源
    最近更新 更多