Считаю себя счастливым пользователем Bash . Однако, когда я начал изучать Unix, это была проприетарная система Unix, которая предоставляла tcsh по умолчанию, поэтому мои первые опыты с оболочкой были связаны с современной версией оболочки C (csh). Это оказалось счастливой случайностью, потому что tcsh также был предпочтительным вариантом на киностудии, где я работал позже в своей карьере.
По сей день есть несколько задач, которые я связываю с tcsh, хотя здесь нет логической корреляции. Я до сих пор использую tcsh по крайней мере в одной системе, хотя бы для того, чтобы оставаться на практике. Я также устанавливаю его во всех своих системах, чтобы поддерживать совместимость с моими собственными сценариями tcsh и гарантировать, что я могу запустить его, когда мне нужно написать сценарий, который я предпочитаю иметь в tcsh.
Tcsh — это современное продолжение csh. Когда в 1978 году была выпущена оболочка C, пользователи были в восторге от ее синтаксиса, подобного C. В то время C был новым языком программирования, и, что более важно, на нем была написана Unix, поэтому большинству пользователей Unix было удобнее использовать C, чем произвольный язык сценариев. Например, в Bash этот ifцикл выполняет «секретный» вызов testдвоичного файла для оценки условного оператора (часть в скобках):
if
test
v=1 if [ $v -gt 0 ] then echo "verbose" fi
Вот тот же оператор в csh или tcsh, без внешнего вызова, testпотому что условный оператор (код в скобках) использует встроенную оценку csh:
set v=1 if ($v > 1) then echo "verbose" endif
Это демонстрирует несколько вещей, как хороших, так и плохих. Например, для программиста на C естественно вводить условное выражение в круглых скобках, а с точки зрения программиста желательно, чтобы математическая оценка была встроена в исполняемый файл. С другой стороны, ifсинтаксис цикла больше похож на Lua, чем на C, в котором фигурные скобки используются в качестве разделителей:
// this does not work in Csh if ( v>1 ) { printf("verbose"); }
В некотором смысле, это хорошо подытоживает csh: он чистый, эффективный и знакомый для некоторых, но причудливый и непоследовательный.
Так зачем это использовать?
Я пишу больше на C ++ и Java, чем на C, поэтому мой интерес к tcsh мало разделяет с его исторической претензией на известность. Однако мне нравится Lua , и я думаю о tcsh и других оболочках, как о Lua и Python или даже о Markdown и Docbook . Обе оболочки имеют свои достоинства, и легко указать на ту, которая более популярна, но в отношении другой есть строгая ясность. Фактически, я чувствую, что tcsh обладает точностью, которой не хватает многим другим оболочкам.
Вы не можете позволить себе роскошь типизированных переменных в оболочках, но с tcsh вы можете по крайней мере объявить их с помощью ключевого слова. Как ни странно, есть несколько ключевых слов, которые вы можете использовать для этой задачи, но я остановился на одном set:
set
> set var=foo > echo $var foo
Вы можете расширить переменные, введя имя переменной ( varв данном примере) , а затем нажмите Ctrl + X следуют $ ключ (доллар). В приведенном выше примере установлено varзначение foo.
var
foo
Как и во многих других оболочках, вы можете перечислить все установленные переменные, используя их setбез аргументов:
> set term xterm tty pts/2 uid 1000 user rsa var foo [...]
Вы можете отключить переменную с помощью unsetкоманды:
unset
> unset var > set | grep var >
Возможно, вы видели в скрипте такие строки:
var=GitLab ${var,,}
Вторая строка — это встроенная функция для преобразования содержимого varв нижний регистр.
Хотя дополнительные функции, подобные этим, бесконечно полезны, я иногда чувствую, что они приглашают к обфускации. Создание сценариев оболочки похоже на HTML программирования; это один из немногих серьезных языков, которым вы можете научиться, просто читая чужой код. Это не обязательно хорошая причина отказываться от полезных функций, но это причина, по которой я стараюсь избегать некоторых загадочных сокращений, популярных в разных языках. При написании в tcsh у меня нет возможности использовать столько сокращений, поэтому сложные строковые операции должны выполняться с помощью основных инструментов Unix, а не встроенных ярлыков. Я считаю, что в результате получается код, который легче читать, и это имеет большое значение для будущих участников — и для будущего, забывшего обо мне .
Одна из вещей, которые мне нравятся в tcsh, — это встроенный ярлык @ math. Как и большинство пользователей Unix-самоучки, я наткнулся на bc и с тех пор пожалел об этом. Не по своей вине, bc часто преподают пользователям как калькулятор командной строки, хотя на самом деле он лучше подходит в качестве языка вычислений . Обходные пути включают удивительный калькулятор из 300 строк в чистом Bash , или команду let в Bash, или команду @ в tcsh.
> @ n = ( 1 + 1 / 2 ) > echo $n 1
Для очень сложной математики, возможно, стоит изучить bc или хорошую математическую библиотеку Python .
Для меня tcsh представляет собой идеальный баланс между абсолютной простотой и основными функциями. Это оболочка не для всех пользователей и даже не для всех целей, но если вы хотите упростить свой взгляд на текстовый мир, tcsh может предоставить интересную альтернативу.
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies