GNU/Linux >> Linux の 問題 >  >> Linux

何年も経ってもまだtcshが好きな理由

私は自分自身を幸せなBashユーザーだと思っています。ただし、Unixの調査を開始したとき、デフォルトでtcshを提供する独自のUnixシステム上にあったため、私の初期のシェルエクスペリエンスはCシェルの最新バージョン(csh)でした。それは幸運な事故であることが判明しました。なぜなら、tcshは、私のキャリアの後半で働いていた映画スタジオでも選択されたシェルだったからです。

その他のLinuxリソース

  • Linuxコマンドのチートシート
  • 高度なLinuxコマンドのチートシート
  • 無料のオンラインコース:RHELの技術概要
  • Linuxネットワーキングのチートシート
  • SELinuxチートシート
  • Linuxの一般的なコマンドのチートシート
  • Linuxコンテナとは何ですか?
  • 最新のLinux記事

今日まで、論理的な相関関係はありませんが、私がtcshに関連付けるタスクがいくつかあります。練習を続けるためだけに、少なくとも1つのシステムで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

testを外部から呼び出さずに、cshまたはtcshで同じステートメントを使用します。 条件ステートメント(括弧内のコード)はcshの組み込み評価を使用するため:

set v=1

if ($v > 1) then
  echo "verbose"
endif

これは、良い点と悪い点の両方を示すいくつかのことを示しています。たとえば、Cプログラマーが括弧内に条件を入力するのは自然なことであり、プログラマーの観点からは、実行可能ファイルに数学評価を組み込むことが望ましいです。一方、if ループ構文は、区切り文字として中括弧を使用するCよりもLuaとの共通点があります。

// this does not work in Csh
if ( v>1 ) {
        printf("verbose");
}

ある意味で、これはcshをうまくまとめています。クリーンで効率的で、一部の人にとってはなじみがありますが、風変わりで一貫性がありません。

では、なぜそれを使用するのですか?

精度のためのTcsh

私はCコードよりも多くのC++とJavaを書いているので、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    seth
var     foo
[...]

unsetを使用して変数の設定を解除できます コマンド:

> unset var
> set | grep var
>
不足している機能は機能です

スクリプトで次のような行を見たことがあるかもしれません:

var=GitLab
${var,,}

2行目は、varの内容を変換するための組み込み関数です。 小文字にします。

このような追加の機能は無限に役立ちますが、難読化への誘いであると感じることもあります。シェルスクリプトはプログラミングのHTMLのようなものです。これは、他の人のコードを読むだけで自分自身に教えることができる数少ない深刻な言語の1つです。それは必ずしも便利な機能をあきらめる大きな理由ではありませんが、それは私がさまざまな言語で人気のある不可解な速記のいくつかを避けようとする理由です。 tcshで書くとき、私にはそれほど多くの省略形を使用するオプションがないので、複雑な文字列操作は、組み込みのショートカットではなく、基本的なUnixツールを使用して実行する必要があります。その結果、コードが読みやすくなり、将来の貢献者、そして将来の忘れられたに大きな違いをもたらすと思います。 。

組み込みの数学

tcshについて私が気に入っていることの1つは、組み込みの @です。 数学のショートカット。ほとんどの独学のUnixユーザーのように、私はbcに出くわしました、そしてそれ以来私はそれを後悔しています。 bcは、それ自体に問題がないため、実際には計算言語として適している場合に、コマンドライン計算機としてユーザーに教えられることがよくあります。 。回避策には、純粋なBashの驚くべき300行の計算機、または let Bashのコマンド、または @ tcshのコマンド。

> @ n = ( 1 + 1 / 2 )
> echo $n
1

非常に複雑な数学の場合、bcまたは優れたPython数学ライブラリを学ぶ価値があるかもしれません。

すべての必需品

私にとって、tcshは非常にシンプルな機能と本質的な機能の完璧なバランスをとっています。これは、すべてのユーザー、またはすべての目的のためのシェルではありませんが、テキストベースの世界の表示を単純化することを検討している場合は、tcshが興味深い代替手段を提供する可能性があります。


Linux
  1. お誕生日おめでとう、GNU:35年経った今でもGNUが好きな理由

  2. AntergosLinuxに恋をした理由

  3. Systemdが開始直後にサービスを停止するのはなぜですか?

  1. プログラマーがLinuxパッケージを愛する理由

  2. なぜ私のコードをコンパイルするために、clang はまだ libgcc.a を必要とするのですか?

  3. 24 時間後も計算中の Diffie Hellman パラメータ

  1. Linuxでのコーディングが好きな5つの理由

  2. Dd対猫— Ddは今でも関連性がありますか?

  3. コマンドが見つからないのになぜ長い遅延があるのですか?