澳门威斯尼人平台登陆:剥离与退出状态

by admin on 2019年9月7日

/usr/libexec/gconf-sanity-check-2退出状态256的解决

退出状态, 一般情况下,0为成功,1-255为失败

每个命令都会返回一个退出状态(exit
status),有时也叫做返回状态(return status)或退出码(exit code)

命令执行成功返回0,如果返回一个非0值,通常情况下会被认为是一个错误代码。一个运行状态良好的UNIX命令、程序和工具在正常执行退出后都会返回一个0的退出码,当然也有例外

脚本中的函数和脚本本身也会返回一个退出状态。在脚本或者脚本函数中执行的最后的命令会决定它们的退出状态。在脚本中,exit
nnn 命令将会把nnn退出状态码传递给shell(nnn 必须是 0-255
之间的整型数)

当一个脚本以不带参数的 exit
来结束时,脚本的退出状态由脚本最后执行命令决定(exit 命令之前)

逻辑非操作符 ! 将会反转测试或命令的结果,并且这将会 影响退出状态

#!/bin/bash
COMMAND_1
...
COMMAND_LAST

# 将以最后的命令来决定退出状态
exit     # 正常都是exit $? ,并且 $? 对于测试脚本中的命令的执行结果特别有用
# exit,exit $? 以及省略 exit 效果等同


在管道执行后,$?  给出最后执行的那条命令的退出状态

唯爱与技术不可辜负
2017-10-14 23 : 43
回龙观

退出和退出状态码

linux /usr/bin/ld cannot find解决

 

exit被用来结束一个脚本, 就像在C语言中一样. 它也返回一个值,
并且这个值会传递给脚本的父进程, 父进程会使用这个值做下一步的处理.

 

CentOS启动后显示 /usr/libexec/gconf-sanity-check-2 退出状态256
。X-windows也进不去了。

每个命令都会返回一个 退出状态码 (有时候也被称为 返回状态 ).
成功的命令返回0, 而不成功的命令返回非零值,
非零值通常都被解释成一个错误码. 行为良好的UNIX命令, 程序,
和工具都会返回0作为退出码来表示成功, 虽然偶尔也会有例外.

问题:

 

同样的, 脚本中的函数和脚本本身也会返回退出状态码.
在脚本或者是脚本函数中执行的最后的命令会决定退出状态码. 在脚本中, exit
nnn命令将会把 nnn退出码传递给shell( nnn必须是十进制数, 范围必须是0 –
255).

在linux环境编译应用程式或lib的source code时常常会出现如下的错误讯息:

问题原因:

 当脚本以不带参数的exit命令来结束时,
脚本的退出状态码就由脚本中最后执行的命令来决定(就是exit之前的命令).

 

 

  1 #!/bin/bash
  2
  3 COMMAND_1
  4
  5 . . .
  6
  7 # 将以最后的命令来决定退出状态码.
  8 COMMAND_LAST
  9
 10 exit

/usr/bin/ld: cannot find -lxxx

搭建NFS服务器的时候,删除了/tmp下的一些文件,然后还修改了 755 的权限。

不带参数的exit命令与 exit $?的效果是一样的, 甚至脚本的结尾不写exit,
也与前两者的效果相同.

 

 

  1 #!/bin/bash
  2
  3 COMMAND_1
  4
  5 . . .
  6
  7 # 将以最后的命令来决定退出状态码.
  8 COMMAND_LAST
  9
 10 exit $?

这些讯息会随着编译不同类型的source code 而有不同的结果出来如:

问题解决:
 

  1 #!/bin/bash
  2
  3 COMMAND1
  4
  5 . . .
  6
  7 # 将以最后的命令来决定退出状态码.
  8 COMMAND_LAST

/usr/bin/ld: cannot find -lc

1.按住 Ctrl + Alt + F2 进入虚拟终端,然后修改/tmp的权限为777就ok!

 

/usr/bin/ld: cannot find -lltdl

  www.2cto.com  

$?保存了最后所执行的命令的退出状态码. 当函数返回之后,
$?保存函数中最后所执行的命令的退出状态码.
这就是bash对函数”返回值”的处理方法. 当一个脚本退出,
$?保存了脚本的退出状态码,
这个退出状态码也就是脚本中最后一个执行命令的退出状态码. 一般情况下,
0表示成功, 在范围1 – 255的整数表示错误.

/usr/bin/ld: cannot find -lXtst

2.我今天是这样进去的,和上次root密码忘记的时候一样,重新启动系统,读秒的时候按下任意键,就会进入菜单模式,然后按下e就会进入grub的编辑模式。大概的内容是下面的:


 

 

下面我们看一个实例说明退出和退出状态码

其中xxx即表示函式库文件名称,如上例的:libc.so、libltdl.so、libXtst.so。

root(hd0,0)

[html]
#!/bin/bash 
echo hello 
echo $?    # 退出状态为0, 因为命令执行成功. 
 
lskdf      # 无效命令. 
echo $?    # 非零的退出状态, 因为命令执行失败. 
 
echo 
exit 113   # 返回113退出状态给shell. 
# 为了验证这个结果, 可以在脚本结束的地方使用”echo $?”.  
#  一般的, ‘exit 0’ 表示成功,而一个非零的退出码表示一个错误,
或者是反常的条件. 

其命名规则是:lib+库名(即xxx)+.so。

 

#!/bin/bash
echo hello
echo $?    # 退出状态为0, 因为命令执行成功.

 

kernel /vmlinuz-2.6 xxxxxxxxx

lskdf      # 无效命令.
echo $?    # 非零的退出状态, 因为命令执行失败.

会发生这样的原因有以下三种情形:

 

echo
exit 113   # 返回113退出状态给shell.
# 为了验证这个结果, 可以在脚本结束的地方使用”echo $?”.
#  一般的, ‘exit 0’ 表示成功,而一个非零的退出码表示一个错误,
或者是反常的条件.实验结果:

1 系统没有安装相对应的lib

initrd /initrdxxxxxx

[html]
[email protected]:~/resource/study/shell_study#
chmod 777 exit_test  
[email protected]:~/resource/study/shell_study#
./exit_test  
hello 

./exit_test: line 5: lskdf: command not found 
127 
 
[email protected]:~/resource/study/shell_study#
echo $? 
113 

2 相对应的lib版本不对

 

[email protected]:~/resource/study/shell_study#
chmod 777 exit_test
[email protected]:~/resource/study/shell_study#
./exit_test
hello
0
./exit_test: line 5: lskdf: command not found
127

3 lib(.so档)的symbolic link 不正确,没有连结到正确的函式库文件(.so)

把光标移动到kernel那一行,按下e进入编辑模式,在行最后加 single
就可以进入系统了。再把/tmp权限修改成777

[email protected]:~/resource/study/shell_study#
echo $?
113
翻转一个条件的用法

 

 

[html]
[email protected]:~/resource/study/shell_study#
true 
[email protected]:~/resource/study/shell_study#
echo “exit status of \”true\”=$?” 
exit status of “true”=0 
[email protected]:~/resource/study/shell_study#
! true 
[email protected]:~/resource/study/shell_study#
echo “exit status of \”true\”=$?” 
exit status of “true”=1 
[email protected]:~/resource/study/shell_study#
echo “exit status of \”true\”=$?” 
exit status of “true”=0 
[email protected]:~/resource/study/shell_study#
echo “exit status of \”true\”=$?” 
exit status of “true”=0 
[email protected]:~/resource/study/shell_study#
! true 
[email protected]:~/resource/study/shell_study#
echo “exit status of \”true\”=$?” 
exit status of “true”=1 
[email protected]:~/resource/study/shell_study#
echo “exit status of \”true\”=$?” 
exit status of “true”=0 

解决方法:

 

exit被用来结束一个脚本,
就像在C语言中一样. 它也返回一个值, 并且这个值会传递给脚本的父进程,
父进程会使用这个值…

(1)先判断在/usr/lib 下的相对应的函式库文件(.so) 的symbolic link 是否正确

摘自 firefoxbug的专栏

若不正确改成正确的连结目标即可解决问题。

CentOS启动后显示 /usr/libexec/gconf-sanity-check-2 退出状态256
。X-windows也进不去了。 问题原因: 搭建…

 

(2)若不是symbolic link
的问题引起,而是系统缺少相对应的lib安装lib即可解决。

 

(3)如何安装缺少的lib:

以上面三个错误讯息为例:

错误1缺少libc的LIB

错误2缺少libltdl的LIB

错误3缺少libXtst的LIB 

 

  以Ubuntu为例:

  先搜寻相对应的LIB再进行安装的作业如:

  apt-cache search libc-dev

apt-cache search libltdl-dev 

apt-cache search libXtst-dev

 

实例:

在进行输入法gcin的Source Code的编译时出现以下的错误讯息:

/usr/bin/ld: cannot find -lXtst

 

经检查后发现是:

lib(.so档)的symbolic link 不正确

 

解决方法如下:

cd /usr/lib

ln -s libXtst.so.6 libXtst.so

 

如果在/usr/lib的目录下找不到libXtst.so
档,那么就表示系统没有安装libXtst的函式库。

解法如下:

apt-get install libxtst-dev

 

环境:vmware server + RHEL5.4 +fcitx3.63在执行make时遇到错误

 

[[email protected]
 fcitx-3.6.3] make

 

make  all-recursive

make[1]: Entering directory `/home/oracle/Desktop/fcitx-3.6.3′

Making all in doc

make[2]: Entering directory `/home/oracle/Desktop/fcitx-3.6.3/doc’

make[2]: Nothing to be done for `all’.

make[2]: Leaving directory `/home/oracle/Desktop/fcitx-3.6.3/doc’

Making all in xpm

make[2]: Entering directory `/home/oracle/Desktop/fcitx-3.6.3/xpm’

make[2]: Nothing to be done for `all’.

make[2]: Leaving directory `/home/oracle/Desktop/fcitx-3.6.3/xpm’

Making all in lib

make[2]: Entering directory `/home/oracle/Desktop/fcitx-3.6.3/lib’

make[2]: Nothing to be done for `all’.

make[2]: Leaving directory `/home/oracle/Desktop/fcitx-3.6.3/lib’

Making all in src

make[2]: Entering directory `/home/oracle/Desktop/fcitx-3.6.3/src’

gcc -O2 -fno-strength-reduce -g -O2   -D_ENABLE_TRAY    -Wall -lXpm
-lXtst -lpthread  -o fcitx IC.o ime.o InputWindow.o KeyList.o main.o
MainWindow.o MyErrorsHandlers.o punc.o py.o PYFA.o pyMapTable.o
pyParser.o sp.o tools.o ui.o table.o xim.o qw.o tray.o TrayWindow.o
DBus.o vk.o about.o QuickPhrase.o AutoEng.o extra.o internalVersion.o
ImeRemote.o ../lib/libXimd.a -lX11 

/usr/bin/ld: cannot find -lXtst

collect2: ld returned 1 exit status

make[2]: *** [fcitx] Error 1

make[2]: Leaving directory `/home/oracle/Desktop/fcitx-3.6.3/src’

make[1]: *** [all-recursive] Error 1

make[1]: Leaving directory `/home/oracle/Desktop/fcitx-3.6.3′

make: *** [all] Error 2

 

经过检查在目录  /usr/bin/ld下面没有发现lXtst

/usr/bin/ld cannot find解决 问题:
在linux环境编译应用程式或lib的source code时常常会出现如下的错误讯息:
/usr/bin/ld: cannot find -lxxx 这些讯息…

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图