linux shell /usr/bin/env bash和/bin/sh 、/bin/bash有什么区别 | 查看和修改当前登录的Shell

一、linux shell #!/usr/bin/env bash和#!/bin/sh、 #!/bin/bash有什么区别

Why is #!/usr/bin/env bash superior to #!/bin/bash?
参考URL: https://stackoverflow.com/questions/21612980/why-is-usr-bin-env-bash-superior-to-bin-bash/21613044

命令解释器的位置声明,那么,当执行该脚本时,系统就知道该去哪里找这个命令解释器。

#!/usr/bin/env在PATH中搜索bash,而bash并不总是在/bin中,特别是在非Linux系统上。

通过/usr/bin/env 运行程序,用户不需要去寻找程序在系统中的位置(因为在不同的系统,命令或程序存放的位置可能不同)

使用#!/bin/bash 场景和需求点:
当路径被硬编码在 shebang 中时,我必须使用那个解释器运行。因此,# !/bin/bash 强制我使用 bash 的默认安装版本。 BASH 脚本可能被这个系统和其他系统使用,使用非标准版本的 BASH 可能会产生不希望的效果。我很可能希望确保 bash 的稳定标准版本与我的 shell 脚本一起使用。因此,我可能希望硬编码我的事务中的路径。

总结:大部分情况下,/usr/bin/env是优先选择的,因为它提供了灵活性,特别是你想在不同的版本下运行这个脚本;而指定具体位置的方式#! /usr/bin/bash,在某些情况下更安全,因为它限制了代码注入的可能。(另一个缺点是,由于您没有调用显式可执行文件,因此很可能会出错,并且在多用户系统上存在安全问题(例如,如果有人设法在路径中获取名为bash的可执行文件).

从个人工作总结来看,一般写死反而比较好,应该你的脚本写法不一定兼容其他shell,为了避免不必要的麻烦,我个人建议写死,如:#!/bin/bash

二、查看和修改当前登录的Shell

查看系统当前支持哪些shell

 cat /etc/shells
[root@dev workspace]# cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/tmux
/usr/bin/screen
[root@dev workspace]#

查看系统当前默认的shell:

echo $0

$0是shell脚本的一个特殊变量,表示当前运行脚本的名字。

[root@dev workspace]# echo $0
/bin/bash
[root@dev workspace]#

查看每个用户所使用的shell

口令文件/etc/passwd记录了每个用户所使用的shell,whoami可以查看当前用户名,结合grep过滤下即可查看当前用户所使用的shell。

cat /etc/passwd
cat /etc/passwd | grep `whoami`

注意:理解 $SHELL

不要被一个叫做 $SHELL 的环境变量所迷惑,它被设置为你的默认 shell 的完整路径。因此,这个变量并不一定指向你当前使用的 shell。例如,即使你在终端中调用不同的 shell,$SHELL 也保持不变。

就是说你要理解 $SHELL 的含义,它只是配置默认 shell 的完整路径的变量而已。

[root@dev workspace]# cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/tmux
/usr/bin/screen
[root@dev workspace]# echo $SHELL
/bin/bash
[root@dev workspace]# /bin/sh
[\u@dev \W]$  echo $SHELL
/bin/bash
[\u@dev \W]$

修改默认的shell

chsh命令可以用来修改用户的登录shell。

chsh -s /bin/sh

chsh -s其实修改的就是 /etc/passwd 文件中和我们所登录的用户名相对应的那一行。

修改了系统默认shell之后不会立即生效,需要退出当前shell再次登录系统,修改的shell才会生效。指定的shell必须是全路径,不加会报错。

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值