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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
现在有两个脚本,一个指定了使用/bin/csh,一个没有指定使用的shell,我就想用echo $SHELL把当前使用的打印出来,但是执行下面两个shell脚本后打印的内容都是/sbin/sh,应该是我的做法有问题,所以要怎么查看当前脚本使用的shell呢?
5 R$ S: R$ V7 R" @4 m
9 M% i) S4 _0 M" N$ B$ G# R脚本1:
' ]2 P6 `* i, ^8 Z- Z" G; I8 c3 W#!/bin/csh, o1 I9 T8 y" A" B8 V% X
echo $SHELL
2 W6 \' H/ l) q; U0 }) Q# G% {3 k: S- w
脚本2:
% g* d9 |  H9 {+ A2 x2 {" {/ n; E#--------#/ O5 Q6 i6 w. I; A7 c# d7 U# ]
echo $SHELL/ ^2 \$ i  U; P

该用户从未签到

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

该用户从未签到

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

该用户从未签到

4#
发表于 2020-7-8 19:23 | 只看该作者
查询主进程id的启动进程名即可:Bash/shell code
6 H  e" N. o! g6 }1 g?3 L7 ]: X2 `) c! l5 R4 p6 x# F
1

/ v' k6 C0 i' d+ _5 b0 d0 }( k: Q- e
ps -ef | grep "$$" | sed "/ps/d;/grep/d" | head -n1 | awk '{print$8}'
9 h7 k9 B! w: c/ V; H3 T1 `( t5 ?; C: y
% M( S3 s2 U$ Q+ m7 T% {+ C" u2 R
0 s6 H0 G1 k& U

9 j' j3 \* Q- A0 f  P+ ?& O3 m2 s& {3 r$ T8 J

9 b1 N9 v5 _, o( o4 @; p, K& n( P

点评

谢谢! 我试了你给的命令,用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
! \# q2 I# f6 [6 Q5 [7 |/ x& F查询主进程id的启动进程名即可:Bash/shell code5 t: G9 ?. l& v  c
?

. F! {6 Z5 i3 u! u谢谢!
1 k  h3 k; @% g9 J6 f  @我试了你给的命令,用source调用的话会打印head,用./调用会打印awk,可能是unix的关系。改用ps -ef | grep "$$"这段命令,能在结果中看到相关的shell,应该就是正在运行的shell。/ q! ?1 ]0 e' V
我发现只有使用./调用脚本才会使用#!指定的shell,如果使用source调用脚本,#!指定的shell就不会生效,会使用当前执行脚本的用户的shell,我这个认识是正确的吗?谢谢
8 `' a. J. P0 |4 a* v

点评

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

该用户从未签到

6#
发表于 2020-7-8 19:30 | 只看该作者
Uqzalq 发表于 2020-7-8 19:29; X! v% R! S6 E
谢谢!
' U# w% b3 D% g9 ?9 E% M5 Q我试了你给的命令,用source调用的话会打印head,用./调用会打印awk,可能是unix的关系。改用ps - ...
. `, }% z7 z9 f# D: a' c
对的,当文件不是二进制可执行文件时,当前shell就会读取#!指定的解释器执行,如果没有#!指定的shell,它就会自己去解释执行,source就是代表当前shell来解释执行,所以就不会使用#!指定的shell。
# @" [' H, a% d) a7 @

点评

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

该用户从未签到

7#
 楼主| 发表于 2020-7-8 19:31 | 只看该作者
piday123 发表于 2020-7-8 19:306 Z% {8 |( z7 z- ~& J3 _
对的,当文件不是二进制可执行文件时,当前shell就会读取#!指定的解释器执行,如果没有#!指定的shell,它 ...

5 X) \1 l3 Z( `" J1 w9 a8 C# _: ~好的,十分感谢~
7 p1 d& Z# m5 Z9 A! l
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-26 15:57 , Processed in 0.156250 second(s), 28 queries , Gzip On.

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

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

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