找回密码
 注册
关于网站域名变更的通知
查看: 293|回复: 6
打印 上一主题 下一主题

请问Unix如何查看当前shell脚本使用的是什么shell?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-7-8 14:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
现在有两个脚本,一个指定了使用/bin/csh,一个没有指定使用的shell,我就想用echo $SHELL把当前使用的打印出来,但是执行下面两个shell脚本后打印的内容都是/sbin/sh,应该是我的做法有问题,所以要怎么查看当前脚本使用的shell呢?
# K; N9 i3 s7 W( k: M# c5 X0 u& u) d! j
脚本1:# q5 v  u2 F/ |* j# G- o
#!/bin/csh
* B, v$ R* j8 s% Z6 b2 z. `echo $SHELL
' n' P$ D3 n' K5 o9 h
5 d; m- W, E: E$ L+ }% m脚本2:
. N/ J# _0 @  l4 [0 q& O, x- R5 H7 W#--------#
" M, S! q( _) w$ Fecho $SHELL
) X& O! b1 {- f2 \0 K" U. @

该用户从未签到

2#
发表于 2020-7-8 15:45 | 只看该作者
为什么要看这个啊

该用户从未签到

3#
发表于 2020-7-8 19:21 | 只看该作者
$SHELL 是调用环境变量,环境变量没有变过

该用户从未签到

4#
发表于 2020-7-8 19:23 | 只看该作者
查询主进程id的启动进程名即可:Bash/shell code6 T# c* z7 J: x8 z5 k4 Y0 |' b
?
. O8 Q( @4 m2 P# }( c% A
1

4 w, |+ D* c6 j2 ]
ps -ef | grep "$$" | sed "/ps/d;/grep/d" | head -n1 | awk '{print$8}'4 I" z0 J: K+ S$ }5 o# r

3 Y" q, Z! g" ^& u

3 c$ z8 K6 I( F- g) s( w# v7 e* S# F2 O* h8 Y% A

+ K! N' r& z0 M+ W+ K- n: A8 L4 s: m# o+ D3 k5 f! @- a

9 V; [' ^+ |$ t. s

点评

谢谢! 我试了你给的命令,用source调用的话会打印head,用./调用会打印awk,可能是unix的关系。改用ps -ef | grep "$$"这段命令,能在结果中看到相关的shell,应该就是正在运行的shell。 我发现只有使用./调用脚本  详情 回复 发表于 2020-7-8 19:29

该用户从未签到

5#
 楼主| 发表于 2020-7-8 19:29 | 只看该作者
piday123 发表于 2020-7-8 19:23
0 I+ [7 w1 Z$ ?1 L: F查询主进程id的启动进程名即可:Bash/shell code
& d* u- u' B. R* C+ s: n' I?

( R7 h- F9 O1 J0 ~, r9 H( o谢谢!# c  A. n, v3 z5 ^4 v6 X0 M- H9 G3 ~
我试了你给的命令,用source调用的话会打印head,用./调用会打印awk,可能是unix的关系。改用ps -ef | grep "$$"这段命令,能在结果中看到相关的shell,应该就是正在运行的shell。& ?  q( d& `7 G; t& n
我发现只有使用./调用脚本才会使用#!指定的shell,如果使用source调用脚本,#!指定的shell就不会生效,会使用当前执行脚本的用户的shell,我这个认识是正确的吗?谢谢
* H! ?* ]# K. H: t2 o

点评

对的,当文件不是二进制可执行文件时,当前shell就会读取#!指定的解释器执行,如果没有#!指定的shell,它就会自己去解释执行,source就是代表当前shell来解释执行,所以就不会使用#!指定的shell。  详情 回复 发表于 2020-7-8 19:30

该用户从未签到

6#
发表于 2020-7-8 19:30 | 只看该作者
Uqzalq 发表于 2020-7-8 19:29! j& {# G: a7 H+ E) Z9 E
谢谢!( D2 H: @% |" m2 r! [) W) [. M
我试了你给的命令,用source调用的话会打印head,用./调用会打印awk,可能是unix的关系。改用ps - ...
6 Y" o! O- G; L
对的,当文件不是二进制可执行文件时,当前shell就会读取#!指定的解释器执行,如果没有#!指定的shell,它就会自己去解释执行,source就是代表当前shell来解释执行,所以就不会使用#!指定的shell。7 W& s; a/ B" c* l+ z" G) \! L

点评

好的,十分感谢~  详情 回复 发表于 2020-7-8 19:31

该用户从未签到

7#
 楼主| 发表于 2020-7-8 19:31 | 只看该作者
piday123 发表于 2020-7-8 19:30
9 X; f5 O6 Q; e. u3 L5 F5 x对的,当文件不是二进制可执行文件时,当前shell就会读取#!指定的解释器执行,如果没有#!指定的shell,它 ...

# }& l& \9 d4 P; G好的,十分感谢~- F% ~/ X+ w4 _. f& m8 b" W# @
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-29 22:20 , Processed in 0.140625 second(s), 32 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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