こんにちは。私はLinux CentOS5を使っています。
あるユーザ(aaaとする)でログインシェルを/bin/cshにしています。
システムロケールをUTF8からSJISに変更すると(i18nファイルを変更しました)、
[aaa@centos ~]$ su - aaa
パスワード:
~: イベントが見つかりません.
となってcshスクリプトなどが使えず、/home/aaa/.cshrcも正常に読み込まれないようなので、/home/aaa/.cshrcで書いているPATHなどが通っていません。
わからないのは、システムロケールがUTF8の時は問題なくログインして.cshrcもちゃんと読めていたのに、SJISにするとエラーが起こることです。
どうかよろしくお願いします。
No.6ベストアンサー
- 回答日時:
> こう書くのが普通なのですね・・・普通、というのがまだわかってないです。
/dev/の中にnullなんてものが・・・勉強します!普通というか、名前無しパイプ(|)を使えば余計なファイルを作成せず、コマンドの標準入力に${path}を内容渡せますし、grepも終了ステータス(cshの場合$status)を見れば一致するものが見つかったかどうか分かるので。
あと、/dev/null は、例えばコマンド結果を画面やファイルに出力したくない場合にその出力を /dev/null に出力すれば破棄してくれる特別ものです。
> ログイン時のエラーはまだ、そのままです。
あれ、そうなんですか。
実際、修正して試したりしていないのでまだエラーになる所があるのかな。
> エラーを再現してくださったディストリは何ですか?
> [lean@brynhildr ~]$ cat /etc/redhat-release
> CentOS release 5.2 (Final)
とあるように CentOS 5.2 です。
この回答への補足
毎度ありがとうございます!
/dev/nullのこと、勉強になりました・・
よくよく探したら、DBのインスタンスディレクトリにもcshrcがあって、そこで引っかかっていました。
でもそれはたくさん「!~」があってしかもDB関連のファイルなので
修正するのがいやで、
~aaa/.cshrcの中で
setenv LANG ja_JP.UTF-8
source ~/sqllib/dbcshrc
setenv LANG ja_JP.SJIS
と書いて回避することにしました。
かなり変ですけど
dbcshrcはASKIIなんで、!~以外は関係ないはずなんで。。。
csh、SJISのバグっぽいですけど欧米のひとはSJIS使わないんで?ネット上ではちゃんとしたバグ報告は見つからず、いまいち歯切れが悪いですが、
上記の対応でエラーもなくなり、今は事なきを得ました。
Lean様、たくさん、ご教授いただいてほんとにありがとうございました。
No.5
- 回答日時:
> echo ${path} > /tmp/wkpath.txt
> set tmp_path=`grep /usr/X11R6/bin /tmp/wkpath.txt`
> if ($?tmp_path) then
> setenv PATH "${PATH}:/usr/X11R6/bin"
> endif
は、
echo ${path} | grep '/usr/X11R6/bin' >& /dev/null
if (${status}) then
setenv PATH "${PATH}:/usr/X11R6/bin"
endif
かな。
この回答への補足
ありがとうございます!
こう書くのが普通なのですね・・・普通、というのがまだわかってないです。/dev/の中にnullなんてものが・・・勉強します!
/etc/csh.login
/etc/profile.d/krb5-devel.csh
/etc/profile.d/krb5-workstation.csh
を変更しました。
ログイン時のエラーはまだ、そのままです。
が、/home/aaa/.cshrcで指定するプロンプトが適用されるようになりました。.cshrcの途中まで適用できています。
プロンプト指定のあとに書いている環境変数は反映されていないので。
何度もありがとうございます。
ところで、Lean様がエラーを再現してくださったディストリは何ですか?
よろしければ教えていただきたいです。
No.4
- 回答日時:
No.2です。
[lean@brynhildr ~]$ cat /etc/redhat-release
CentOS release 5.2 (Final)
[lean@brynhildr ~]$ cat /etc/sysconfig/i18n
#LANG="ja_JP.UTF-8"
LANG="ja_JP.SJIS"
[lean@brynhildr ~]$ locale -a | grep ja
ja_JP
ja_JP.SJIS
ja_JP.eucjp
ja_JP.ujis
ja_JP.utf8
japanese
japanese.euc
japanese.sjis
[lean@brynhildr ~]$ csh -f -X /etc/csh.cshrc
:
if ( -r /etc/profile.d/krb5-workstation.csh ) then
source /etc/profile.d/krb5-workstation.csh
~: イベントが見つかりません.
[lean@brynhildr ~]$ csh -f -X /etc/csh.login
if ( 1 ) then
~: イベントが見つかりません.
/etc/csh.cshrc の方が /etc/profile.d/krb5-workstation.csh に、/etc/csh.login は /etc/csh.login 自体にエラーをなる部分があるみたいなので、それぞれのファイルを見ると
[lean@brynhildr ~]$ cat /etc/profile.d/krb5-workstation.csh
if ( "${path}" !~ */usr/kerberos/bin* ) then
set path = ( /usr/kerberos/bin $path )
endif
if ( "${path}" !~ */usr/kerberos/sbin* ) then
if ( `id -u` == 0 ) then
set path = ( /usr/kerberos/sbin $path )
endif
endif
[lean@brynhildr ~]$ cat /etc/csh.login
# /etc/csh.login
# System wide environment and startup programs, for login setup
if ($?PATH) then
if ( "${path}" !~ */usr/X11R6/bin* ) then
setenv PATH "${PATH}:/usr/X11R6/bin"
endif
else
if ( $uid == 0 ) then
setenv PATH "/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin"
else
setenv PATH "/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin"
endif
endif
setenv HOSTNAME `/bin/hostname`
set history=1000
if ( ! -f $HOME/.inputrc ) then
setenv INPUTRC /etc/inputrc
endif
どちらもif文の中の「!~(文字列比較)」は演算子として正しいのだけれど、ロケールがSJISの時には何故かヒストリ展開されているみたい。
たぶん、/etc/profile.d/krb5-workstation.csh の方が先に読み込まれるのでこっちでエラーになっているのだと思う。
個人的には、もともとロケールにSJISがなく、追加してもこういう状況になるならロケールSJISでは使用しないかな。
PATHの設定で「!~」の右側がPATHに含まれていないならPATHに追加しているので、「!~」以外でPATHに含まれているか調べるようにするか、無条件に付けたりする等して対処かな。
この回答への補足
すごいです!ありがとうございます!
わざわざ再現してくださったなんて。。。
ご提示くださった2方法のうち、無条件にsetenvにしたら
PATHにログインするたびに文字列が増えるように思います。
ログアウトしたら必ず消すようにしたらいいのかもしれないですが。
それでまず、!~を使わないように/etc/csh.loginをカスタマイズしようと試みました。
# /etc/csh.login
略
if ($?PATH) then
echo ${path} > /tmp/wkpath.txt
set tmp_path=`grep /usr/X11R6/bin /tmp/wkpath.txt`
if ($?tmp_path) then
setenv PATH "${PATH}:/usr/X11R6/bin"
endif
else
略
!~のかわりにgrepを使うことにしました・・
これで4行めifに1が返ってきたら、環境変数の文字列が追加されることがわかりました。
cshコマンドXオプションでもエラーは出てません。
今はcsh.loginだけですが、 /etc/profile.d/krb5-workstation.csh のほうもこれでやってみるつもりです。
Cシェルプログラミングは初めてなんですが・・なにかまずいことがあるようでしたら
教えていただければ幸いです。
というか、ここまでご回答くださっただけでも大感激です。
ほんまにありがとうございます。
No.3
- 回答日時:
No.2です。
> そのプロンプトで!使うの削除して
> utf8の状態でhistory 全削除して、
> i18nファイルsjisにして
> ログインしてみましたが一緒でした・・。
そうすると システムファイル /etc/csh.cshrc の方かな。
あと、cshと言ってもtcshだろうから、$HOME/.tcshrc があれば $HOME/.cshrc は読み込まないというのもあるし。
また、「su -」してるからログインシェルになると、システムファイルの /etc/csh.login とか $HOME/.login あたりも読み込むだろうから見てみるといいかも。
この回答への補足
たびたびありがとうございます。
$HOME/.loginにもプロンプトで!マークを使ってました。
ので!マークは削除してみました。
$HOME/.tcshrcは存在しませんでした。
で、もう一度ログインしてみましたが状況は同じでした・・・
そして、さらにわからないのが
[aaa@cenos ~]$ csh
~: イベントが見つかりません.
てなることです。
cshスクリプトのあるディレクトリまで移動して
[aaa@cenos ~]$ ./scriptname
~: イベントが見つかりません.
でもこうなります。
泥沼にはまっています...
No.2
- 回答日時:
> ~: イベントが見つかりません.
cshのヒストリ置換が出来なかった時のメッセージじゃないかな。
○cshヒストリ置換失敗例
%history
1 14:18 ls
2 14:18 ps
3 14:18 history
%!vi
vi: イベントが見つかりません.
.cshrc内のどこかに ! があったりしますか?
この回答への補足
回答投稿ありがとうございます。
!あります。プロンプト指定するのにコマンド番号表示で。
そのプロンプトで!使うの削除して
utf8の状態でhistory 全削除して、
i18nファイルsjisにして
ログインしてみましたが一緒でした・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Gmail gmailに弾かれて困っています。SPFレコードについて、これは詰んでいるでしょうか 3 2023/06/10 13:08
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- 邦楽 AAA 3 2023/05/04 07:09
- Excel(エクセル) Excel VBA 3 2023/04/22 10:46
- Windows 10 windows11 起動エラー 0xc0000225 1 2022/05/14 11:58
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- その他(プログラミング・Web制作) bashのgrepで複数の検索、かつスクリプト内で改行する方法を教えてください。 1 2022/10/06 20:09
- その他(セキュリティ) googleアカウントが使えない 4 2022/12/15 14:14
- Instagram 助けてください! 昨日Webインスタでログインしようとしたらメモしてあったパスワードが違いますと出た 3 2022/08/18 18:26
- X(旧Twitter) Twitterについてです。 メルアドの更新をパスワード変更せずにやったらログインできなくなってしま 2 2023/07/13 21:20
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スクリプトのエラー「unexpecte...
-
bashでシングルクォート内の変...
-
シェルスクリプト実行で”そのよ...
-
Linux 月を英語表示したい
-
CygwinでX Windiws Systemが起...
-
cronがうまく動作していないっ...
-
Linuxで自作バッチファイルの置...
-
crontabの設定について
-
chmodをapplescriptで実行したい。
-
gnu gccをインストールした
-
cygwinとタスクについて
-
複数存在するgrepについて
-
シェルスクリプトで標準エラー...
-
hp-uxで時間(時計)を合...
-
JAVAの環境変数が初期化されて...
-
apachectl start command not f...
-
Dirコマンドでフォルダ内ファイ...
-
エクセルの表にヘンな枠が・・・
-
batである文字列内に特定の文字...
-
TOPコマンドで表示するCPU使用...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スクリプトのエラー「unexpecte...
-
bashでシングルクォート内の変...
-
シェルスクリプト実行で”そのよ...
-
Linux 月を英語表示したい
-
自動パスワード入力でscpするス...
-
crontabでsql/plusの起動
-
cronの@rebootでのdateコマンド...
-
Linuxで自作バッチファイルの置...
-
apachectl start command not f...
-
cron設定で正常に動作しない
-
Cronジョブの終了時刻を簡単に...
-
UNIXのbashエラーでnot a valid
-
sudoでシェルスクリプトを実行...
-
crontabでjavaだけが上手く動い...
-
macのターミナルからemacsを開...
-
crontabで実行されない部分があ...
-
Cシェルのかっこいいプロンプト...
-
Linuxでシェルスクリプトがフル...
-
hp-uxで時間(時計)を合...
-
bad interpreterで、シェルが使...
おすすめ情報