Строка 4: $data: неоднозначное перенаправление при использовании passwordbox

history команда просто воздействует на Ваш файл истории, $HISTFILE (обычно ~/.history или ~/.bash_history). Будет намного легче, если Вы просто удалите строки из того файла, который может быть сделан много путей. grep один путь, но необходимо бояться перезаписывать файл, все еще читая его:

$ grep -v searchstring "$HISTFILE" > /tmp/history
$ mv /tmp/history "$HISTFILE"

Иначе с sed:

$ sed -i '/searchstring/d' "$HISTFILE"
3
03.04.2014, 18:59
2 ответа

“Неоднозначное перенаправление” касается фрагмента 2>$data. Это указывает что значение переменной data не расширяется точно до одного слова.

Учитывая путь Вы устанавливаете его, наиболее вероятно что значение data пусто потому что tempfile команда перестала работать. Вы, по некоторым причинам, скрываете любое сообщение об ошибке, испускаемое tempfile. Удалите перенаправление:

data=$(tempfile)

tempfile утилита является утилитой Debian, которую Вы не найдете за пределами Debian и производных, таких как Ubuntu и Linux Mint. Вероятно, что Вы запускаете этот скрипт в системе, которая не имеет этой утилиты. Можно использовать подобную утилиту mktemp вместо этого, который широко доступен.

data=$(mktemp)

Кроме того, учитывая, что Вы храните конфиденциальные данные, необходимо удостовериться, что временный файл не будет читаем.

data=$(umask 077; mktemp)

Это сказанное, создавая временный файл более сложно, чем необходимый. Вместо этого сообщите dialog распечатать данные к его стандартному выводу и использовать замену команды.

#!/bin/bash
password=$(dialog --title "Password" \
                  --clear \
                  --passwordbox "Enter your password" 10 30 \
                  --stdout)
ret=$?
…
5
27.01.2020, 21:14
  • 1
    за разговор времени для объяснения всего. Я ver в новинку для Unix поэтому, это немного твердо. Вы проверили меня, что я не ошибался относительно своих проблем только с записью пароля к tempfile. –  TheNiceGuy 06.12.2013, 04:04

Ваша переменная данных является пустой! Вы видите содержание этой переменной с echo $data... это ничего не показывает!

Попробуйте это:

#!/bin/bash
data=/tmp/dialogsh-$$.$RANDOM; > $data
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

Ваша информация о входе сохранит в/tmp каталоге в файле который названный dialog.number.number! Можно изменить его во второй строке источника.

1
27.01.2020, 21:14

Теги

Похожие вопросы