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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
现在有两个脚本,一个指定了使用/bin/csh,一个没有指定使用的shell,我就想用echo $SHELL把当前使用的打印出来,但是执行下面两个shell脚本后打印的内容都是/sbin/sh,应该是我的做法有问题,所以要怎么查看当前脚本使用的shell呢?
' |& f7 q2 N0 L! g/ G' w
; X% B( S& i  Z: ^, T6 W9 F脚本1:
+ }+ |) r: T4 W- ?& Y/ L#!/bin/csh0 v; D% @% h1 ~
echo $SHELL
+ z9 q% U& U0 w; H5 q% m0 q. y" P# {* \7 L6 p! F) k% u. ]; L
脚本2:
/ d0 \& A$ L; m+ Z+ }  K% Z, j#--------#: N: J$ D  \5 T* q3 d* ?
echo $SHELL5 b! h: Q# g7 `* V

该用户从未签到

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

该用户从未签到

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

该用户从未签到

4#
发表于 2020-7-8 19:23 | 只看该作者
查询主进程id的启动进程名即可:Bash/shell code
+ I+ i; h, F* i?5 i$ y) L, M1 Y1 p/ F: c
1

( d0 \* l2 F! K6 \( g6 F
ps -ef | grep "$$" | sed "/ps/d;/grep/d" | head -n1 | awk '{print$8}'* F) b1 S+ O: Q1 ~6 C( d

4 Q: \0 {7 k, Y/ Z" T1 b
$ T/ r% G- X, O' O1 B6 G5 t
, h* k# G; W; O2 y2 e6 ]; U

+ N' D" x0 Q$ v) d7 J& M/ T' M* N' f0 U
! U8 f4 D% p  c/ k" T4 I

点评

谢谢! 我试了你给的命令,用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  h. [* ?( e0 X" h
查询主进程id的启动进程名即可:Bash/shell code* n# k; h, c2 |* b
?
  [8 E1 J- X7 X2 U& I) x
谢谢!
; i& r& i# O4 @5 T& `2 Z我试了你给的命令,用source调用的话会打印head,用./调用会打印awk,可能是unix的关系。改用ps -ef | grep "$$"这段命令,能在结果中看到相关的shell,应该就是正在运行的shell。
& Z! ?' s; c! J) S* f我发现只有使用./调用脚本才会使用#!指定的shell,如果使用source调用脚本,#!指定的shell就不会生效,会使用当前执行脚本的用户的shell,我这个认识是正确的吗?谢谢) V) ~9 H; d8 a# [# O) g

点评

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

该用户从未签到

6#
发表于 2020-7-8 19:30 | 只看该作者
Uqzalq 发表于 2020-7-8 19:29
9 \* @  e) V2 X5 J3 b2 o* S谢谢!
$ t3 I, {3 N* S) p: `我试了你给的命令,用source调用的话会打印head,用./调用会打印awk,可能是unix的关系。改用ps - ...
6 g# f' g, a) m( }& {& `( t# g
对的,当文件不是二进制可执行文件时,当前shell就会读取#!指定的解释器执行,如果没有#!指定的shell,它就会自己去解释执行,source就是代表当前shell来解释执行,所以就不会使用#!指定的shell。* q7 j: U0 [) Z* |, U) E

点评

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

该用户从未签到

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

* \8 |* |8 P+ e" h! y* y好的,十分感谢~
) _4 n0 _1 @# Y# E7 j8 _3 E" q. p* \- q
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-25 02:01 , Processed in 0.218750 second(s), 33 queries , Gzip On.

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

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

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