Нет никакой потребности вообще, чтобы Вы использовали оболочку по умолчанию для данной системы. И Debian и FreeBSD обеспечивают много различных оболочек и большинство, или все они являются доступными на обоих, или предварительно установленных или легко устанавливаемыми.
Не упустите именование. Это весьма характерно для /bin/csh
действительно быть tcsh, или для /bin/sh
быть ударом или ksh.
sh
, Оболочка Bourne, самая старая оболочка Unix, это все еще широко используется. bash
вероятно, наиболее широко используемая sh производная; ksh
и zsh
также широко распространены.
csh
, оболочка C, был разработан для BSD Bill Joy. Это имеет некоторые функции, которые делают для более удобного интерактивного использования, чем sh
(или по крайней мере, чем старая версия sh
это существовало в то время). tcsh
получен из csh
, и добавляет много новых опций, большинство из них нацеленный на интерактивное использование. Как Вы видели путем чтения csh.whynot, csh, и tcsh имеют некоторые проблемы когда дело доходит до использования их для сценариев в противоположность в интерактивном режиме.
Лично, я запустил с csh, затем переключенного на tcsh, когда это стало доступным. Я теперь редко использую csh для сценариев, предпочитая sh или удара (или Perl для чего-либо довольно сложного).
(Обновление, несколько лет спустя: я с тех пор отказался от tcsh, и я теперь использую удар в интерактивном режиме.)
Мой совет состоял бы в том, чтобы выбрать единственную оболочку и изучить это хорошо, с помощью него и на FreeBSD и на Debian. Если Вы выбираете tcsh, я думаю, что необходимо будет установить его на Debian: sudo apt-get install tcsh
. Если Вы выбираете удар, я не знаю, предварительно установлен ли он на FreeBSD; если это не, это должно быть одинаково просто для установки его.
Не необходимо использовать ту же оболочку в интерактивном режиме и для сценариев, но это может избежать некоторого беспорядка и сделать для более короткой кривой обучения.
ksh, вероятно, почти так же мощен как удар, и zsh еще более мощен (и имеет много функций, которые я никогда не не торопился для изучения).
Я предлагаю удар, и для FreeBSD и для Debian (и для любых других подобных Unix систем Вы могли бы использовать), и и для интерактивного использования и для сценариев. Но другой выбор совершенно законен, и некоторые могли бы подойти Вам лучше.
\e-\e.
(или нажатие -
и .
при содержании высокого звука/опции), вставляет предпоследнее слово.
Точно так же \e-2\e.
вставляет третье последнее слово, и \e2\e.
вставляет третье слово.
Используя расширение истории, можно получить доступ к словам предыдущей команды с !:n
где n запускается в 0 с названия команды. !^
эквивалентно !:1
. В этом случае Вы хотите !:2
$ echo foo bar &
[1] 10750
foo bar
$ echo !:2
echo bar
bar
[1]+ Done echo foo bar
Ответы glenn и Lauri корректны, но они требуют слишком большого ввода IMO. Наконец я предложил следующее решение: C-j
цикличное выполнение через аргументы предыдущей команды (исключая амперсанд), от последнего до первого. Это очень практично! Вот то, как сделать это:
Запишите следующий сценарий удара:
#!/bin/bash
cj_hist=$(builtin history | tail -n1)
cj_num=$(cut -f1 -d\ <<< $cj_hist)
if [[ $cj_old_num -eq $cj_num ]]
then
cj_killw='\x17'
else
cj_args=$(cut -f3- -d\ <<< $cj_hist)
cj_args=${cj_args%&}
cj_args=($cj_args)
cj_cnt=0
cj_killw=''
fi
[[ $cj_cnt -le 0 ]] && cj_cnt=${#cj_args[*]}
let cj_cnt--
if [[ $cj_cnt -eq -1 ]]
then
bind '"\ez":""'
# bind -m vi-insert '"\C-o":""'
else
bind '"\ez":"'$cj_killw${cj_args[$cj_cnt]}'"'
# bind -m vi-insert '"\C-o":"'$cj_killw${cj_args[$cj_cnt]}'"'
fi
cj_old_num=$cj_num
Поместите это в свой ~/.bashrc:
bind -x '"\ew": source ~/foo.sh' # ~/foo.sh is the script's path
bind '"\C-j":"\ew\ez"'
# bind -x '"\C-h": source ~/foo.sh' # vi-users: no mess
# bind -m vi-insert '"\C-j":"\C-h\C-o"' # with escapes
NB: Так как мы получаем сценарий, мы должны использовать имена переменной, которые не являются наиболее часто используемыми, следовательно префикс cj_
. Конечно, можно использовать другой префикс.
C-j C-j C-j C-j
может быть быстрее для ввода, чем :!5
хотя, и я не должен считать аргументы. Вы знаете, я делаю глупые вещи ввести меньше символов или дать моему мозгу отдых, такой как: alias l=ls
:-) Лень является самым большим фактором прогресса.
– BertS
17.06.2013, 15:13
local
ограничить объем; и так как Вы получаете его, отбрасываете #!
строка.
– Rich
07.10.2017, 00:52