readline
— это библиотека, которая используется bash
и некоторыми другими программами, но не tcsh
. По историческим причинам tcsh
имеет свою собственную реализацию функции readline -, чей набор функций не обязательно совпадает с -для -с readline. Таким образом, попытка установить переменные readline для tcsh бесплодна, так как они не имеют ничего общего друг с другом.
Ближайшим эквивалентом readline visible-stats
в tcsh
является переменная оболочки addsuffix
, и она уже должна быть установлена по умолчанию.
tcsh bindkey
является встроенной оболочкой tcsh, поэтому вы найдете ее описание в man tcsh
в разделе Встроенные команды . addsuffix
также описан на той же справочной странице в разделе Специальные переменные оболочки .
Один из способов с использованием ed(1)
, который должен работать как с вариантами GNU
, так и с BSD
.
printf '%s\n' '0a' "$(figlet -f slant "p r o f i l e" | sed -n 's/^.*/#&/p')" "". w | ed -s ~/.profile
printf '%s\n'
То же, что и echo
, но более универсальный. "$( )"
называется подстановкой команд, которая захватывает вывод команды. Обратите внимание, что он заключен в двойные кавычки по какой-то причине. 0
— это адрес или номер строки в буфере/файле, который является первой строкой, хотя 1i
тоже должен работать, но я предпочитаю 0a
, так как 1i
не работает с пустыми файлами a
— это команда, которая означает добавление или добавление,. ""
просто создать пустую/новую строку после выводаfiglet
.
Сообщает Эду, что мы закончили редактирование. w
означает запись. |
-ed
-s
, что означает молчание. С GNU sed можно идти до конца:
sed -i '1{H;s/.*/figlet -f slant "p r o f i l e"/e;s/^/#/mg;G}' ~/.profile
Обратите внимание на модификатор e
для первой команды s
, которая выполняет пространство шаблонов, команду figlet, которую я создаю.
Альтернативный вариант использования ex(1)
, vi
/ vim
, эквивалентныйed
:
ex ~/.profile <<EOF
0r !figlet -f slant "p r o f i l e" | sed 's/^/\#/'
w
EOF
Вставляет результаты конвейера figlet перед первой строкой файла и сохраняет их.
Попробуйте (не проверено)
figlet -f slant "p r o f i l e" | sed -n 's/^.*/#&/p' | cat -.profile
Поскольку вы уже используете sed, вы можете сделать это с помощью пары простых вызовов sed:
figlet -f slant "p r o f i l e" | sed 's/^./#&/' | sed '' - file
Последний вызов sed объединяет стандартный ввод(-
)и файл (без изменений ).
Конечно, это можно сделать одним вызовом awk:
figlet -f slant "p r o f i l e" | awk 'NR==FNR{gsub(/^/,"#")}1' - file
Или, если хотите ed
, вы можете сделать:
echo 'r !figlet -f slant "p r o f i l e"
,s/^/#/
r file
w
Q' | ed -s
Хммм, вы хотели один -вкладыш:
printf '%s\n' 'r !figlet -f slant "p r o f i l e"',s/^/#/ 'r file' w Q| ed -s
Значит:
printf '%s\n' # print each argument on one line.
'r !figlet -f slant "p r o f i l e"' # read the output of a sh command.
,s/^/#/ # insert a # at each line start.
'r file' # read the file
w # write (the file)
Q # Quit
| # pipe the commands to the ed call
ed -s # call ed in silent mode.