当社はRedHat Linuxシステムを使用しており、全員に/ homeのアカウントを割り当てています。残念ながら、私たちのシステムはtschを使用していますが、これは私にとっては好ましくありません。さらに、スーパーユーザーの権限がないため、chshコマンドを使用して自分でbashに変更することはできません。さらに悪いことに、ypchshも私には利用できません。したがって、最後に、次の行を.cshrcに追加します。
bash
echo $0
.bashrcを適切に構成します(元の.cshrcからコピーし、必要な構文エラーを修正します)。これで、見かけのシェルがbashになります(「echo $ 0」コマンドから表示できます)。
ここで問題が発生します:
Vimを使用してcppファイル(Hello_Worldなど)を編集し、vimで「:!g ++ -g Hello_World.cpp -o hw.out」を使用してファイルをコンパイルすると、結果が表示されず、vimはで終了します。 「bash」が表示されますが(ターミナルが開いているときのように)、通常の「キーを押す」ことなく、vimでの作業に戻ります。 Hello_World.cppフォルダーには、.Hello_World.cpp.swpファイルがありますが、hw.outはありません。再びvimHello_World.cppを実行すると、このcppファイルが開いていることがわかります。
ただし、フォルダ内のcppファイルをg ++し、vimと:!を使用しない場合は、すべて問題ありません。実際には、 :!今はvimにとって違法のようです。
オリジナルのtcshを使えば、すべてOKです。
この奇妙なエラーをどのように修正できますか?
よろしくお願いします。
清
ところで:tcshにもhistdup設定がありますが、主にHISTIGNOREとHISTCONTROLの利便性のために、tcshよりもbashの方が好きです。
以下は少し役に立ちましたが、それでも私の問題には満足できませんでした。
これを.loginスクリプトに入れます。
setenv Shell /bin/bash
exec bash -l
最初の行は、シェル環境変数を設定します。 2行目は、tcsh
をbash
に置き換えますが、ログインシェルとして実行するように指示します(したがって、bash
は.profile
などを処理します)。 -i
オプションを追加して、インタラクティブにすることができます。必要ないはずです。
すべてのユーザーのデフォルトのシェルは、/ etc/passwdファイルに保存されます。ユーザーは、chsh
コマンドを発行することにより、デフォルトのシェルを/ etc/shellsにリストされている任意のシェルに変更できます。詳細については、chsh(1)およびshells(5)のマニュアルページを参照してください。
この答えは、最初から不要なシェルを起動する必要がないため、ログイン後に現在のシェルを置き換えるアプローチよりも「正確」です。このアプローチは、管理者が/ etc/shellsファイルを無視し、それにbashを追加するのを忘れた場合にのみ役立ちます(決して)。
多大なるご協力をありがとうございました。
私が選んだ最終的な解決策を与える前に、私は最初の質問の間違いを指摘しなければなりません。私の元の.cshrcには、次の3行があります。
bash
source ~/.bashrc
echo $0
前に2行目を入力し忘れました。ごめんなさい。
さて、この2つの方法を試してみましたが、結果を以下に示します。
1).vimrcメソッド
私が書いたら
bash
source ~/.bashrc
echo $0
〜/ .cshrcで
そして
set Shell=/bin/bash
〜/ .vimrcで
〜/ .loginファイルがなくても、vimと:!g ++は問題ありませんが、:!gdba.outには誤りがあります。さらに、「echo $ 0」は「bash」を提供しますが、「echo $ Shell」は「/ bin/tcsh」を提供します。 $ 0と$ Shellの違いは正確にはわかりません。
2)。ログイン方法
私が書いたら
setenv Shell /bin/bash
bash
source ~/.bashrc
echo $0
.loginで
しかし、〜/ .vimrcの「setShell = ...」や〜/ .cshrcの「bash ...」のようなものは何もありません。すべて問題ありません。ここで、「echo $ 0」は「bash」を提供し、「echo $ Shell」は「/ bin/bash」を提供します。
2行目のbashは、「bash-l」に置き換えることができます。 「execbash」または「execbash-l」に置き換えると、アカウントにログインできなくなることに注意してください。 (システムは自動的にすぐに終了します。)理由もわかりません。
2番目の方法は素晴らしいと思います。よろしくお願いします。