history
команда просто воздействует на Ваш файл истории, $HISTFILE
(обычно ~/.history
или ~/.bash_history
). Будет намного легче, если Вы просто удалите строки из того файла, который может быть сделан много путей. grep
один путь, но необходимо бояться перезаписывать файл, все еще читая его:
$ grep -v searchstring "$HISTFILE" > /tmp/history
$ mv /tmp/history "$HISTFILE"
Иначе с sed
:
$ sed -i '/searchstring/d' "$HISTFILE"
“Неоднозначное перенаправление” касается фрагмента 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=$?
…
Ваша переменная данных является пустой! Вы видите содержание этой переменной с 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! Можно изменить его во второй строке источника.