QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 825|回复: 9

咋解决,让CHMSEE 不出现这种情况的话?

[复制链接]
发表于 2005-4-2 22:17:36 | 显示全部楼层 |阅读模式
chmsee
Initializer Done

(chmsee:3699): Gtk-WARNING **: /usr/lib/gtk-2.0/immodules/im-scim.so: \xce?\xa8\xb4?\xb2\xcf\xed\xb6\xd4\xcf\xf3\xce?\xfe: ?\xd3\xd0\xc4?\xf6\xce?\xfe\xbb\xf2??
(chmsee:3699): Gtk-WARNING **: Loading IM context type 'scim' failed

(chmsee:3699): Gtk-WARNING **: /usr/lib/gtk-2.0/immodules/im-scim.so: \xce?\xa8\xb4?\xb2\xcf\xed\xb6\xd4\xcf\xf3\xce?\xfe: ?\xd3\xd0\xc4?\xf6\xce?\xfe\xbb\xf2??
(chmsee:3699): Gtk-WARNING **: Loading IM context type 'scim' failed

(chmsee:3699): Gtk-WARNING **: /usr/lib/gtk-2.0/immodules/im-scim.so: \xce?\xa8\xb4?\xb2\xcf\xed\xb6\xd4\xcf\xf3\xce?\xfe: ?\xd3\xd0\xc4?\xf6\xce?\xfe\xbb\xf2??
(chmsee:3699): Gtk-WARNING **: Loading IM context type 'scim' failed

(chmsee:3699): Gtk-WARNING **: /usr/lib/gtk-2.0/immodules/im-scim.so: \xce?\xa8\xb4?\xb2\xcf\xed\xb6\xd4\xcf\xf3\xce?\xfe: ?\xd3\xd0\xc4?\xf6\xce?\xfe\xbb\xf2??
(chmsee:3699): Gtk-WARNING **: Loading IM context type 'scim' failed

(chmsee:3699): Gtk-WARNING **: /usr/lib/gtk-2.0/immodules/im-scim.so: \xce?\xa8\xb4?\xb2\xcf\xed\xb6\xd4\xcf\xf3\xce?\xfe: ?\xd3\xd0\xc4?\xf6\xce?\xfe\xbb\xf2??
(chmsee:3699): Gtk-WARNING **: Loading IM context type 'scim' failed

(chmsee:3699): Gtk-WARNING **: /usr/lib/gtk-2.0/immodules/im-scim.so: \xce?\xa8\xb4?\xb2\xcf\xed\xb6\xd4\xcf\xf3\xce?\xfe: ?\xd3\xd0\xc4?\xf6\xce?\xfe\xbb\xf2??
(chmsee:3699): Gtk-WARNING **: Loading IM context type 'scim' failed


      
发表于 2005-4-3 09:09:01 | 显示全部楼层
chmsee是什么
回复

使用道具 举报

发表于 2005-4-3 09:51:08 | 显示全部楼层
何为CHM文件?
CHM文件是视窗下的说明文件(Help File),他是由许多的超文本文件(HtmlFile)经过编译(Compile)而成,我们可以在自己的桌上型电脑中找到许多这类型的文件,也有许多电子书一样采用这种格式来储存,例如MicrosoftPress全系列的书籍在书中内涵的光碟中就是如此存放的。

在windows下有很多的chm文件,在debian下可以用chmsee来看
apt-get install chmsee

在linux下看chm格式的软件
回复

使用道具 举报

发表于 2005-4-3 09:54:54 | 显示全部楼层
楼朱的意思应该是把输出的信息给屏蔽掉?
[code:1]chmsee 2>&1 /dev/null[/code:1]
试试!
回复

使用道具 举报

发表于 2005-4-3 10:00:17 | 显示全部楼层
哦。。。一直用xchm
不过 。。看字面也该知道。。。晕了 晕了

ps:个人认为 chm最好在windows看,有些文档非要在linux下 ,那就在windows下把chm给转成别的格式
回复

使用道具 举报

发表于 2005-4-3 10:15:39 | 显示全部楼层
chmsee挺好用的,在linux下效果也不错,在本版就有一个详细介绍linux命令的chm文件,我看过,用chmsee效果不错!
回复

使用道具 举报

 楼主| 发表于 2005-4-4 21:52:42 | 显示全部楼层
[quote:7e769e9309="zhy2111314"]楼朱的意思应该是把输出的信息给屏蔽掉?
[code:1]chmsee 2>&1 /dev/null[/code:1]
试试![/quote]

/dev/null是不是无字符设备文件,2>&1是什么意思?
回复

使用道具 举报

发表于 2005-4-4 22:49:11 | 显示全部楼层
2>&1 是把输出错误信息并入输出信息中
看一下下面的帖子里有一段介绍FD(file descriptor):
5.标准输入、输出和错误
当我们在s h e l l中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。由于文件描述符不容易记忆, s h e l l同时也给出了相应的文件名。
下面就是这些文件描述符及它们通常所对应的文件名:

文件文件描述符
输入文件—标准输入stdin 0:它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出。
输出文件—标准输出stdout 1:它是命令的输出,缺省是屏幕,也可以是文件。
错误输出文件—标准错误stderr 2:这是命令错误的输出,缺省是屏幕,同样也可以是文件。

如果没有特别指定文件说明符,命令将使用缺省的文件说明符(你的屏幕,更确切地说是你的终端)。

系统中实际上有1 2个文件描述符,但是正如我们在上表中所看到的, 0、1、2是标准输入、输出和错误。可以任意使用文件描述符3到9。

在执行命令时,可以指定命令的标准输入、输出和错误,要实现这一点就需要使用文件重定向。下面列出了最常用的重定向组合,并给出了相应的文件描述符。
在对标准错误进行重定向时,必须要使用文件描述符,但是对于标准输入和输出来说,这不是必需的。

常用文件重定向命令
command > filename 把标准输出重定向到一个新文件中
command >> filename 把标准输出重定向到一个文件中(追加)
command 1 > fielname 把标准输出重定向到一个文件中
command > filename 2>&1 把标准输出和标准错误一起重定向到一个文件中
command 2> filename 把标准错误重定向到一个文件中
command 2>> filename 把标准输出重定向到一个文件中(追加)
command >> filename 2>&1 把标准输出和标准错误一起重定向到一个文件中(追加)
command < filename >filename2 把c o m m a n d命令以f i l e n a m e文件作为标准输入,以f i l e n a m e 2文件作为标准输出
command < filename 把c o m m a n d命令以f i l e n a m e文件作为标准输入
command << delimiter 把从标准输入中读入,直至遇到d e l i m i t e r分界符
command <&m 把文件描述符m作为标准输入
command >&m 把标准输出重定向到文件描述符m中
command <&- 关闭标准输入
File Descriptor (FD)

程式的運算,在大部份情況下都是進行數據(data)的處理,
這些數據從哪讀進?又,送出到哪裡呢?
這就是 file descriptor (FD) 的功用了。

在 shell 程式中,最常使用的 FD 大概有三個,分別為:
0: Standard Input (STDIN)
1: Standard Output (STDOUT)
2: Standard Error Output (STDERR)

在標準情況下,這些 FD 分別跟如下設備(device)關聯:
stdin(0): keyboard
stdout(1): monitor
stderr(2): monitor

我們可以用如下下命令測試一下:
[code:1]$ mail -s test root
this is a test mail.
please skip.
^d (同時按 crtl 跟 d 鍵)[/code:1]
很明顯,mail 程式所讀進的數據,就是從 stdin 也就是 keyboard 讀進的。
不過,不見得每個程式的 stdin 都跟 mail 一樣從 keyboard 讀進,
因為程式作者可以從檔案參數讀進 stdin ,如:[code:1]
$ cat /etc/passwd
[/code:1]
但,要是 cat 之後沒有檔案參數則又如何呢?
哦,請您自己玩玩看囉.... ^_^
[code:1]$ cat[/code:1]

(請留意數據輸出到哪裡去了,最後別忘了按 ^d 離開...)
事實上,stderr 沒甚麼難理解的:說穿了就是"錯誤信息"要往哪邊送而已...
比方說,若讀進的檔案參數是不存在的,那我們在 monitor 上就看到了:[code:1]
$ ls no.such.file
ls: no.such.file: No such file or directory
[/code:1]
若,一個命令同時產生 stdout 與 stderr 呢?
那還不簡單,都送到 monitor 來就好了:[code:1]
$ touch my.file
$ ls my.file no.such.file
ls: no.such.file: No such file or directory
my.file
[/code:1]
okay,至此,關於 FD 及其名稱、還有相關聯的設備,相信你已經沒問題了吧?
那好,接下來讓我們看看如何改變這些 FD 的預設數據通道,
我們可用 < 來改變讀進的數據通道(stdin),使之從指定的檔案讀進。
我們可用 > 來改變送出的數據通道(stdout, stderr),使之輸出到指定的檔案。

比方說:[code:1]
$ cat < my.file[/code:1]
就是從 my.file 讀進數據[code:1]
$ mail -s test root < /etc/passwd[/code:1]
則是從 /etc/passwd 讀進...
這樣一來,stdin 將不再是從 keyboard 讀進,而是從檔案讀進了...
嚴格來說,< 符號之前需要指定一個 FD 的(之間不能有空白),
但因為 0 是 < 的預設值,因此 < 與 0< 是一樣的﹗

那,要是用兩個 << 又是啥呢?
這是所謂的 HERE Document ,它可以讓我們輸入一段文本,直到讀到 << 後指定的字串。
比方說:
[code:1]$ cat <<FINISH
first line here
second line there
third line nowhere
FINISH[/code:1]
這樣的話,cat 會讀進 3 行句子,而無需從 keyboard 讀進數據且要等 ^d 結束輸入。

當你搞懂了 0< 原來就是改變 stdin 的數據輸入通道之後,相信要理解如下兩個 redirection 就不難了:
* 1>
* 2>
前者是改變 stdout 的數據輸出通道,後者是改變 stderr 的數據輸出通道。
兩者都是將原本要送出到 monitor 的數據轉向輸出到指定檔案去。
由於 1 是 > 的預設值,因此,1> 與 > 是相同的,都是改 stdout 。

用上面的 ls 例子來說明一下好了:
[code:1]
$ ls my.file no.such.file 1>file.out
ls: no.such.file: No such file or directory[/code:1]
這樣 monitor 就只剩下 stderr 而已。因為 stdout 給寫進 file.out 去了。
[code:1]
$ ls my.file no.such.file 2>file.err
my.file[/code:1]
這樣 monitor 就只剩下 stdout ,因為 stderr 寫進了 file.err 。
[code:1]
$ ls my.file no.such.file 1>file.out 2>file.err[/code:1]
這樣 monitor 就啥也沒有,因為 stdout 與 stderr 都給轉到檔案去了...

不過,有些地方還是要注意一下.
首先,是 file locking 的問題。比方如下這個例子:
[code:1]
$ ls my.file no.such.file 1>file.both 2>file.both[/code:1]
從 file system 的角度來說,單一檔案在單一時間內,只能被單一的 FD 作寫入。
假如 stdout(1) 與 stderr(2) 都同時在寫入 file.both 的話,
則要看它們在寫入時否碰到同時競爭的情形了,基本上是"先搶先贏"的原則。
讓我們用"慢鏡頭"來看一下 stdout 與 stderr 同時寫入 file.out 的情形好了:
* 第 1, 2, 3 秒為 stdout 寫入
* 第 3, 4, 5 秒為 stderr 寫入
那麼,這時候 stderr 的第 3 秒所寫的數據就丟失掉了﹗
要是我們能控制 stderr 必須等 stdout 寫完再寫,或倒過來,stdout 等 stderr 寫完再寫,那問題就能解決。
但從技術上,較難掌控的,尤其是 FD 在作"長期性"的寫入時...

那,如何解決呢?所謂山不轉路轉、路不轉人轉嘛,
我們可以換一個思維:將 stderr 導進 stdout 或將 stdout 導進 sterr ,而不是大家在搶同一份檔案,不就行了﹗
bingo﹗就是這樣啦:
* 2>&1 就是將 stderr 併進 stdout 作輸出
* 1>&2 或 >&2 就是將 stdout 併進 stderr 作輸出
於是,前面的錯誤操作可以改為:
[code:1]$ ls my.file no.such.file 1>file.both 2>&1[/code:1]

[code:1]$ ls my.file no.such.file 2>file.both >&2[/code:1]

在 Linux 檔案系統裡,有個設備檔位於 /dev/null 。
許多人都問過我那是甚麼玩意兒?那就是"空"啦﹗
沒錯﹗空空如也的空就是 null 了....

這個 null 在 I/O Redirection 中可有用得很呢:
* 若將 FD1 跟 FD2 轉到 /dev/null 去,就可將 stdout 與 stderr 弄不見掉。
* 若將 FD0 接到 /dev/null 來,那就是讀進 nothing 。
比方說,當我們在執行一個程式時,畫面會同時送出 stdout 跟 stderr ,
假如你不想看到 stderr (也不想存到檔案去),那可以:
[code:1]$ ls my.file no.such.file 2>/dev/null
my.file
[/code:1]
若要相反:只想看到 stderr 呢?還不簡單﹗將 stdout 弄到 null 就行:
[code:1]$ ls my.file no.such.file >/dev/null
ls: no.such.file: No such file or directory
[/code:1]
那接下來,假如單純只跑程式,不想看到任何輸出結果呢?
除了用 >/dev/null 2>&1 之外,你還可以如此:
[code:1]$ ls my.file no.such.file &>/dev/null[/code:1]
(提示:將 &> 換成 >& 也行啦~~! )

另外,看下面:
[code:1]
$ echo "1" > file.out
$ cat file.out
1
$ echo "2" > file.out
$ cat file.out
2[/code:1]
看來,我們在重導 stdout 或 stderr 進一份檔案時,似乎永遠只獲得最後一次導入的結果。
那,之前的內容呢?
呵~~~ 要解決這個問提很簡單啦,將 > 換成 >> 就好:
$ echo "3" >> file.out
$ cat file.out
2
3
如此一來,被重導的目標檔案之內容並不會失去,而新的內容則一直增加在最後面去。

但,只要你再一次用回單一的 > 來重導的話,那麼,舊的內容還是會被"洗"掉的﹗
這時,你要如何避免呢?
----備份﹗ yes ,我聽到了﹗不過.... 還有更好的嗎?
[code:1]
$ set -o noclobber
$ echo "4" > file.out
-bash: file: cannot overwrite existing file
[/code:1]
那,要如何取消這個"限制"呢?
哦,將 set -o 換成 set +o 就行:[code:1]
$ set +o noclobber
$ echo "5" > file.out
$ cat file.out
5
[/code:1]
再問:那... 有辦法不取消而又"臨時"蓋寫目標檔案嗎
[code:1]
$ set -o noclobber
$ echo "6" >| file.out
$ cat file.out
6[/code:1]
留意到沒有:在 > 後面再加個" | "就好(注意: > 與 | 之間不能有空白哦)....

再來還有一個難題要你去參透的呢:
[code:1]$ echo "some text here" > file
$ cat < file
some text here
$ cat < file > file.bak
$ cat < file.bak
some text here
$ cat < file > file
$ cat < file

[/code:1]
嗯?﹗注意到沒有?﹗﹗
---- 怎麼最後那個 cat 命令看到的 file 竟是空的?﹗
why? why? why?
要理解這一現像其實不難,這只是 priority 的問題而已:
* 在 IO Redirection 中,stdout 與 stderr 的管道會先準備好,才會從 stdin 讀進資料。
也就是說,在上例中,> file 會先將 file 清空,然後才讀進 < file ,
但這時候檔案已經被清空了,因此就變成讀不進任何資料了...

哦~~~ 原來如此~~~~ ^_^
那... 如下兩例又如何呢?
[code:1]
$ cat <> file
$ cat < file >> file
[/code:1]
回复

使用道具 举报

 楼主| 发表于 2005-4-5 13:06:14 | 显示全部楼层
多谢,多谢!   
不过还想问一下,这个是不是也可以那么解决呢?

stardict
bookname: XDICT英汉辞典 , wordcount 177842
bookname: XDICT汉英辞典 , wordcount 160997

(stardict:4881): Gtk-WARNING **: /usr/lib/gtk-2.0/immodules/im-scim.so: \xce?\xa8\xb4?\xb2\xcf\xed\xb6\xd4\xcf\xf3\xce?\xfe: ?\xd3\xd0\xc4?\xf6\xce?\xfe\xbb\xf2??

(stardict:4881): Gtk-WARNING **: Loading IM context type 'scim' failed

(stardict:4881): Gtk-WARNING **: /usr/lib/gtk-2.0/immodules/im-scim.so: \xce?\xa8\xb4?\xb2\xcf\xed\xb6\xd4\xcf\xf3\xce?\xfe: ?\xd3\xd0\xc4?\xf6\xce?\xfe\xbb\xf2??

(stardict:4881): Gtk-WARNING **: Loading IM context type 'scim' failed
回复

使用道具 举报

 楼主| 发表于 2005-4-5 17:15:12 | 显示全部楼层
[quote:71764ae81b="zhy2111314"]楼朱的意思应该是把输出的信息给屏蔽掉?
[code:1]chmsee 2>&1 /dev/null[/code:1]
试试![/quote]


stardict 2>&1 /dev/null
bookname: XDICT英汉辞典 , wordcount 177842
bookname: XDICT汉英辞典 , wordcount 160997

(stardict:5004): Gtk-WARNING **: /usr/lib/gtk-2.0/immodules/im-scim.so: \xce?\xa8\xb4?\xb2\xcf\xed\xb6\xd4\xcf\xf3\xce?\xfe: ?\xd3\xd0\xc4?\xf6\xce?\xfe\xbb\xf2??

(stardict:5004): Gtk-WARNING **: Loading IM context type 'scim' failed

(stardict:5004): Gtk-WARNING **: /usr/lib/gtk-2.0/immodules/im-scim.so: \xce?\xa8\xb4?\xb2\xcf\xed\xb6\xd4\xcf\xf3\xce?\xfe: ?\xd3\xd0\xc4?\xf6\xce?\xfe\xbb\xf2??

(stardict:5004): Gtk-WARNING **: Loading IM context type 'scim' failed
没起什么作用那?!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-3 04:23 , Processed in 0.046382 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表