Linux에서 비밀번호 상자를 만드는 방법은 무엇입니까? [폐쇄]

Linux에서 비밀번호 상자를 만드는 방법은 무엇입니까? [폐쇄]

스크립트가 있지만 찾을 수 없습니다. 오류:

#!/bin/bash

data=$(tempfile 2>/dev/null)

trap "rm -f $data" 0 1 2 5 15

dialog --title "Password" \
--clear \
--passwordbox "Enter your password" 10 30 2> $data

ret=$?

case $ret in
 0)
        echo "Password is $(cat $data)";;
 1)
        echo "Cancel pressed.";;
 255)
        [ -s $data ] && cat $data || echo "ESC pressed.";;
esac

하지만 제대로 작동하지 않습니다.

[root@localhost Desktop]# ./getpasswd1.sh 
./getpasswd1.sh: line 7: $data: ambiguous redirect
Cancel pressed.

답변1

임시 파일에 저장하고 싶지는 않습니다. 꼭 필요한 것은 아니지만 약간의 창의적인 섞기가 필요합니다.

data=$(dialog --passwordbox "Enter your password" 10 30 3>&1- 1>&2- 2>&3-)

그것이 하는 일은 fd 1과 2를 바꾸는 것뿐입니다("X>&Y-" 구성은 "fd Y를 이동하여 fd X가 되도록"을 의미합니다. 예, 혼란스럽기는 하지만 그게 전부입니다). 이렇게 하면 대화 상자가 표준 오류(결국 터미널에서)에 기록되고 비밀번호는 변수로 끝납니다 $data.

답변2

그래서 당신은 가지고 있지 않습니다 tempfile(결과 command not found: ). 따라서 변수는 data빈 문자열로 설정됩니다. 리디렉션을 시도하면 존재하지 않는 값으로 dialog ... 2> $data리디렉션을 시도합니다 . stderr이것은 모호합니다.

옵션은 data=$(tempfile 2>/dev/null)다음으로 변경하거나 설치를 통해 data="/tmp/mytmpfile"설치하는 것 입니다.tempfiledebianutils

관련 정보