У меня почти такая же проблема с (старым) bash 4.2.37, а не с bash 4.3 или 4.4.
То есть: расширение работает с ls
, но не с cd
.
Однако в качестве вспомогательной привязки клавиш я определил (из e S pand):
Ctrl - s в моем
~ / .inputrc
:
Control-s: shell-expand-line
Это позволяет мне набрать: cd $ SOME_DIR
, а затем Ctrl - s , чтобы расширить переменную до:
cd /path/to/some/dir
A Не менее полезное сочетание клавиш (из G лоббирование):
Ctrl - g также в моем
~ / .inputrc
:
Control-g: glob-expand-word
Это позволяет мне набрать ls b *
, а затем Ctrl - g , чтобы развернуть b *
:
$ ls b*<kbd>Ctrl</kbd>-<kbd>s</kbd>
$ ls bash.html_node.tar.gz bash.pdf
Что также позволяет мне, чтобы редактировать командную строку и добавлять или удалять элементы по мере необходимости.
Я нашел способ сделать это:
sed -r 's/(.*:)(: )([[:graph:]]+)/echo "\1 `echo -n '\\3' |base64 -d`"/ge' "$FILE_JOINED"
И если вы хотите сложить длинные строки, (на основе этого ответа)
sed -r 's/(.*:)(: )([[:graph:]]+)/echo "\1 `echo -n '\\3' |base64 -d`"/ge' "$FILE_JOINED" | \
awk -v WIDTH=76 '
{
space="";
while (length>WIDTH) {
print substr($0,1,WIDTH);
space=" ";
$0=space substr($0,WIDTH+1);
}
print;
}
'
Если кому надо, вот весь скрипт.
[Обратите внимание, что команда скрипта AWK оставляет в покое закомментированные строки (строки, начинающиеся с " #" ), которые не включены в предыдущую]:
#!/bin/bash
FILE=$1
DIR=`dirname $FILE`
pushd $DIR
WIDTH=76
FILE=`basename $FILE`
FILE_JOINED="`basename $FILE.ldif`-una-linea.ldif"
FILE_DECODED="`basename $FILE.ldif`-decodificado.ldif"
echo
echo DIR: $DIR
echo FILE: $FILE
echo FILE_JOINED: $FILE_JOINED
echo FILE_DECODED: $FILE_DECODED
sed -n 'H; ${ x; s/\n//; s/\n //g; p}' "$FILE" > "$FILE_JOINED"
sed -r 's/(.*:)(: )([[:graph:]]+)/echo "\1 `echo -n '\\3' |base64 -d`"/ge' "$FILE_JOINED" | \
awk -v WIDTH=$WIDTH -v space=" " '
/^[^#]/ {
while (length>WIDTH) {
print substr($0,1,WIDTH);
$0=space substr($0,WIDTH+1);
}
print;
}
/^[#]|^$/ {
print;
}
' > $FILE_DECODED
rm $FILE_JOINED
ОБНОВЛЕНИЕ 20180830
Произошла ошибка расширения оболочки. Это не сохранение символов «*», а замена их списком файлов.
Исправление заключалось в добавлении двойных кавычек в первую команду echo. Я уже исправил показанные ранее команды и скрипт.
Команда ОШИБОЧНАЯ была:
sed -r 's/(.*:)(: )([[:graph:]]+)/echo \1 `echo -n '\\3' |base64 -d`/ge' "$FILE_JOINED"
ОБНОВЛЕНИЕ 20180830 -б
Команда AWK также изменяла комментарии, чего не должно было быть.
Команда ПРЕДЫДУЩАЯ была:
awk -v WIDTH=$WIDTH '
BEGIN {
space=" ";
}
{
while (length>WIDTH) {
print substr($0,1,WIDTH);
$0=space substr($0,WIDTH+1);
}
print;
}
' > $FILE_DECODED