Почему я все еще люблю tcsh после всех этих лет

Мы предоставляем услуги удаленного администрирования серверов

Почему я все еще люблю tcsh после всех этих лет

Поделиться

Считаю себя счастливым пользователем Bash . Однако, когда я начал изучать Unix, это была проприетарная система Unix, которая предоставляла tcsh по умолчанию, поэтому мои первые опыты с оболочкой были связаны с современной версией оболочки C (csh). Это оказалось счастливой случайностью, потому что tcsh также был предпочтительным вариантом на киностудии, где я работал позже в своей карьере.

По сей день есть несколько задач, которые я связываю с tcsh, хотя здесь нет логической корреляции. Я до сих пор использую tcsh по крайней мере в одной системе, хотя бы для того, чтобы оставаться на практике. Я также устанавливаю его во всех своих системах, чтобы поддерживать совместимость с моими собственными сценариями tcsh и гарантировать, что я могу запустить его, когда мне нужно написать сценарий, который я предпочитаю иметь в tcsh.

 

Разница между оболочкой C и Bash

Tcsh — это современное продолжение csh. Когда в 1978 году была выпущена оболочка C, пользователи были в восторге от ее синтаксиса, подобного C. В то время C был новым языком программирования, и, что более важно, на нем была написана Unix, поэтому большинству пользователей Unix было удобнее использовать C, чем произвольный язык сценариев. Например, в Bash этот 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: он чистый, эффективный и знакомый для некоторых, но причудливый и непоследовательный.

Так зачем это использовать?

Tcsh для точности

Я пишу больше на C ++ и Java, чем на C, поэтому мой интерес к tcsh мало разделяет с его исторической претензией на известность. Однако мне нравится Lua , и я думаю о tcsh и других оболочках, как о Lua и Python или даже о Markdown и Docbook . Обе оболочки имеют свои достоинства, и легко указать на ту, которая более популярна, но в отношении другой есть строгая ясность. Фактически, я чувствую, что tcsh обладает точностью, которой не хватает многим другим оболочкам.

Переменные

Вы не можете позволить себе роскошь типизированных переменных в оболочках, но с tcsh вы можете по крайней мере объявить их с помощью ключевого слова. Как ни странно, есть несколько ключевых слов, которые вы можете использовать для этой задачи, но я остановился на одном set:

> set var=foo
> echo $var
foo

Вы можете расширить переменные, введя имя переменной ( varв данном примере) , а затем нажмите Ctrl + X следуют  $  ключ (доллар). В приведенном выше примере установлено varзначение foo.

Как и во многих других оболочках, вы можете перечислить все установленные переменные, используя их setбез аргументов:

> set
term    xterm
tty     pts/2
uid     1000
user    rsa
var     foo
[...]

Вы можете отключить переменную с помощью 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 может предоставить интересную альтернативу.

 2019-2020 © linuxadmins all rights reserved

Facebook Twitter Vkontakte