스크립트가 있지만 찾을 수 없습니다. 오류:
#!/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"
설치하는 것 입니다.tempfile
debianutils