6

私は私のために働くいくつかのコードを持っています、しかし私が何人かの同僚にそれを与えたとき、それは壊れました。彼らは使用していますtcshが、私が理解できる限り、私はを使用してcshいます。

私はもう試した:

csh -v
csh --version
csh -V
csh --help
csh -h

成功しませんでした(それらはすべて私をインタプリタプロンプトに直接連れて行ってくれます)。文字列「version」のマニュアルページも作成しましたが、そこでも役立つものは何も思いつきませんでした。インストールしたバージョンを確認する方法はありcshますか?

- 編集 -

からのシンボリックリンクをたどると/bin/csh、それらは終了し/bin/bsd-cshているように見えます。これは、誰かに役立つ場合は、BSDフレーバーのcshシェルを使用していることを意味しているようです。また、私はubuntulinuxを使用しています。

4

3 に答える 3

5

コメントで、Ubuntuを使用していることを示しました。これは、へのシンボリックリンクです。これは/bin/cshへのシンボリックリンクです。/etc/alternatives/csh/bin/csh

cshシェルはcshBSDUnixで作成されたため、への間接的なシンボリックリンクであることは驚くことではありません/bin/bsd-csh。Unixプログラムが独自のバージョン番号を報告することが一般的になる前の1978年頃にさかのぼります。

あなたはUbuntuを使用しているので、これは次のとおりです。

dpkg -l csh

あなたが持っているバージョンを教えてくれるはずです-Debian/Ubuntuパッケージのバージョン番号は、あなたがすでに持っている情報よりも役立つとは思われませんが。また、パッケージのバージョン番号とシェルのバージョンの関係は完全には明確ではありません。

それが正しいパッケージ名だと思います。そうでない場合は、試してくださいdpkg -S /bin/bsd-csh

tcsh次のように、実行しているかどうかを確認できます。

if ($?tcsh) then
    echo This is tcsh
else
    echo This is csh, not tcsh
endif

tcshcshとの下位互換性があり、主にインタラクティブな使用のためにいくつかの追加機能があります。tcsh用に作成されたスクリプトは、tcsh固有の機能を使用している場合、cshで簡単に失敗する可能性がありますが、tcshがcshスクリプトを処理できることを期待しています。tcsh(1)マニュアルページにあるように:

tcsh は、Berkeley UNIX Cシェルcsh(1)の拡張された、しかし完全に互換性のあるバージョンです。

失敗したスクリプト全体を投稿することはおそらくできないと思いますが、自分に役立ち、同僚に失敗する小さな代表的な例を投稿できますか?

1つの解決策は、同僚にバニラcshをシステムにインストールするように依頼することです。/bin/tcsh必要に応じてインタラクティブシェルとして使用することもできます#!/bin/cshが、スクリプトはtcshではなく古いcshによって実行されます。

最後に、これへのリンクを追加せずに[t]cshスクリプトに関する質問に答えることはできません。

/bin/csh補遺: tcshではないSolarisシステムにアクセスできます。必要に応じて、そこで簡単なテストを実行できます。1つのデータポイント:両方とも/bin/tcshnullコマンドとして受け入れますが、/bin/csh引数を受け入れません::/bin/csh

% :
% arg
:: Too many arguments
于 2013-01-10T16:36:28.803 に答える
3

csh --versionが実際に... (!)cshへのシンボリックリンクである場合にのみ機能します/bin/tcsh

それ以外の場合、変数を設定することになっているこのMKSToolkitcshを除いて、セッションはバージョンを設定していないようです。csh$csh_version

事前定義された変数

次の変数は、Cシェルにとって特別な意味を持っています。
これらのうちargv、、、、、、、、、、、、、、、csh_versionおよびは常にシェルによってcwd設定homepathれます。およびを 除いて、この設定は初期化時にのみ発生します。これらの変数は、ユーザーが明示的に行わない限り変更されません。promptROOTDIRshellstatusCOMSPECTMPDIR
cwdstatus

たとえば、次のドットファイルを参照してください。

shell_is_csh  () { return [ -n "$csh_version"  ]; }

/bin/cshにリンクする/etc/alternatives/cshリンク/bin/bsd-csh
どうやらそれはbsd-csh

...その後、bsd-cshどのようなバージョン機能もサポートしていないようです。

于 2013-01-10T15:10:55.423 に答える
2

Ubuntuを使用している場合は、いくつかのパッチが適用されcshたバージョンです。OpenBSDバージョンをどこにもエンコードしないため、バージョンの取得はまったくサポートされていません。しかし、それを超えてあなたを助けることはできません。

cshubuntuにインストールしていないが、をインストールしている場合は、のエイリアスとしてtcsh使用されます。あなたが発見したように、それらはほとんど互換性があります。tcshcsh

あなた自身のために、あなたはおそらくupdate-alternativesにリダイレクトcshすることによって問題をデバッグすることができますtcsh(あなたがtcshもインストールしている限り)。

于 2013-01-10T16:40:21.057 に答える