source ~/.bashrc出现if: Expression Syntax. 以及sh、bash、csh、tcsh、ash介绍

source .bashrc

报错:
if: Expression Syntax.

--------------------------------------------------------------------------------

查看:https://stackoverflow.com/questions/14440105/bashrc-if-expression-syntax-error

You can check your shell by echoing $SHELL, and you can check which version of bash with $BASH_VERSION. (If the latter is unset, your shell is not bash.)

不同的 shell 之间语法有一些差异。

 

查看当前 Linux 的默认 Shell,那么可以输出 SHELL 环境变量:
[zcy@ubuntu ~]$ echo $SHELL
/bin/csh 

[zcy@ubuntu ~]$ echo $BASH_VERSION

BASH_VERSION: Undefined variable.
--------------------------------------------------------------------------------
果然是 shell 的问题。于是:

[zcy@ubuntu ~]$ exec bash

解决问题。

 

介绍几种常见的Shell:sh、bash、csh、tcsh、ash

      Linux 是一个开源的操作系统,由分布在世界各地的多个组织机构或个人共同开发完成,每个组织结构或个人负责一部分功能,最后组合在一起,就构成了今天的 Linux。例如:

  • Linux 内核最初由芬兰黑客 Linus Torvalds 开发,后来他组建了团队,Linux 内核由这个团队维护。
  • GNU 组织开发了很多核心软件和基础库,例如 GCC 编译器、C语言标准库、文本编辑器 Emacs、进程管理软件、Shell 以及 GNOME 桌面环境等。
  • VIM 编辑器由荷兰人 Bram Moolenaar 开发。


      Windows、Mac OS、Android 等操作系统不一样,它们都由一家公司开发,所有的核心软件和基础库都由一家公司做决定,容易形成统一的标准,一般不会开发多款功能类似的软件。

      而 Linux 不一样,它是“万国牌”,由多个组织机构开发,不同的组织机构为了发展自己的 Linux 分支可能会开发出功能类似的软件,它们各有优缺点,用户可以自由选择。Shell 就是这样的一款软件,不同的组织机构开发了不同的 Shell,它们各有所长,有的占用资源少,有的支持高级编程功能,有的兼容性好,有的重视用户体验。

Shell 既是一种脚本编程语言,也是一个连接内核和用户的软件。

常见的 Shell 有 sh、bash、csh、tcsh、ash 等。

sh

sh 的全称是 Bourne shell,由 AT&T 公司的 Steve Bourne开发,为了纪念他,就用他的名字命名了。

sh 是 UNIX 上的标准 shell,很多 UNIX 版本都配有 sh。sh 是第一个流行的 Shell。

csh

sh 之后另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计的,这个 shell 的语法有点类似C语言,所以才得名为 C shell ,简称为 csh。

Bill Joy 是一个风云人物,他创立了 BSD 操作系统,开发了 vi 编辑器,还是 Sun 公司的创始人之一。

BSD 是 UNIX 的一个重要分支,后人在此基础上发展出了很多现代的操作系统,最著名的有 FreeBSD、OpenBSD 和 NetBSD,就连 Mac OS X 在很大程度上也基于BSD。

tcsh

tcsh 是 csh 的增强版,加入了命令补全功能,提供了更加强大的语法支持。

ash

一个简单的轻量级的 Shell,占用资源少,适合运行于低内存环境,但是与下面讲到的 bash shell 完全兼容。

bash

bash shell 是 Linux 的默认 shell,本教程也基于 bash 编写。

bash 由 GNU 组织开发,保持了对 sh shell 的兼容性,是各种 Linux 发行版默认配置的 shell。

bash 兼容 sh 意味着,针对 sh 编写的 Shell 代码可以不加修改地在 bash 中运行。

尽管如此,bash 和 sh 还是有一些不同之处:

  • 一方面,bash 扩展了一些命令和参数;
  • 另一方面,bash 并不完全和 sh 兼容,它们有些行为并不一致,但在大多数企业运维的情况下区别不大,特殊场景可以使用 bash 代替 sh。

查看 Shell

Shell 是一个程序,一般都是放在/bin或者/user/bin目录下,当前 Linux 系统可用的 Shell 都记录在/etc/shells文件中/etc/shells是一个纯文本文件,你可以在图形界面下打开它,也可以使用 cat 命令查看它。

通过 cat 命令来查看当前 Linux 系统的可用 Shell:

$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh

在现代的 Linux 上,sh 已经被 bash 代替,/bin/sh往往是指向/bin/bash的符号链接。

如果你希望查看当前 Linux 的默认 Shell,那么可以输出 SHELL 环境变量:

$ echo $SHELL
/bin/bash

输出结果表明默认的 Shell 是 bash。
 

设置环境变量LD_LIBRARY_PATH

查看环境变量是否设置
env | grep LD_LIBRARY_PATH

csh or tcsh:
From csh or tcsh, if not set: 
    setenv LD_LIBRARY_PATH /usr/local/lib
From csh or tcsh, if already set: 
    setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH:
bash or ksh:
From bash or ksh, if not set: 
    export LD_LIBRARY_PATH=/usr/local/lib
From bash or ksh, if already set: 
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

sh:
From sh, if not set: 
    LD_LIBRARY_PATH=/usr/local/lib
    export LD_LIBRARY_PATH
From sh, if already set: 
    LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
    export LD_LIBRARY_PATH

 

http://c.biancheng.net/cpp/view/6995.html

http://www.gnu.org/software/bash/manual/bashref.html#index-exec-113

https://www.cnblogs.com/zhaoyl/archive/2012/07/07/2580749.html

<think>好的,我现在遇到了一个权限不够的问题,用户执行的是“~/.bashrc”时提示权限被拒绝。我需要分析可能的原因,并给出解决方法。 首先,用户输入的命令是“yyy@wxsc04:~$ ~/.bashrc”,这里可能存在误解。通常,.bashrc是一个shell脚本,用于配置用户的bash环境。用户可能想执行这个文件,但直接运行它可能需要执行权限。不过,通常.bashrc不需要被直接执行,而是由bash在启动时自动加载。所以用户可能想用source命令或者重新加载配置,比如“source ~/.bashrc”或“. ~/.bashrc”。这时候不需要执行权限,只需要读权限。 接下来,检查权限问题。使用ls -l ~/.bashrc查看权限是否正确。如果权限不足,可能需要用chmod修改权限。例如,添加用户读权限:chmod u+r ~/.bashrc。但是修改系统文件权限时要谨慎,确保不会开放过多权限,比如不应该给其他用户写权限。 另外,用户可能误用了sudo来执行自己的.bashrc,但这可能不安全,因为.bashrc属于用户自己,不需要超级用户权限。不过,如果确实需要执行权限,可以用chmod +x ~/.bashrc,但这不是常规做法,正确的方法还是用source命令。 总结可能的原因:1. 试图直接执行.bashrc而没有执行权限;2. 错误地使用了执行命令而非source。解决方法包括检查权限,使用正确的命令加载配置,或者根据需要调整权限。需要提醒用户谨慎修改权限,避免安全风险。</think>你遇到的 `权限不够` 错误是因为你试图 **直接执行** `.bashrc` 文件,但该文件没有 **可执行权限**。以下是逐步分析和解决方法: --- ### 1. **问题分析** - **命令行为**:你输入了 `~/.bashrc`,意图可能是想加载或执行该文件。 - **权限错误**:系统提示 `权限不够`,说明当前用户对 `.bashrc` 文件缺少执行权限(`x` 权限)。 --- ### 2. **根本原因** - **`.bashrc` 的作用**:此文件是 Bash Shell 的配置文件,用于定义用户环境变量、别名等。它通常由 Shell **自动加载**(如打开新终端时),**不需要直接执行**。 - **权限问题**:直接运行 `~/.bashrc` 时,系统会尝试将其作为脚本执行,但该文件默认只有 **读权限(`r`)** 和 **写权限(`w`)**,没有 **执行权限(`x`)**。 --- ### 3. **解决方法** #### 方案一:使用 `source` 命令(推荐) 直接加载 `.bashrc` 的配置,无需执行权限: ```bash source ~/.bashrc # 或简写为 . ~/.bashrc ``` - **原理**:`source` 命令会在当前 Shell 环境中读取并执行文件中的命令,绕过文件执行权限的要求。 --- #### 方案二:添加执行权限(不推荐) 如果一定要直接执行文件,需添加执行权限: ```bash chmod +x ~/.bashrc # 添加执行权限 ./.bashrc # 执行文件 ``` - **注意**:此操作可能导致安全问题,因为 `.bashrc` 通常不需要执行权限。 --- #### 方案三:检查文件所有权 确保文件属于当前用户(若文件所有权异常): ```bash ls -l ~/.bashrc # 查看文件权限和所有者 sudo chown $USER ~/.bashrc # 将文件所有者改为当前用户(如果需要) ``` --- ### 4. **补充说明** - **为什么直接执行会报错**? Shell 脚本需要同时满足以下条件才能直接执行: - 文件有可执行权限(`x`)。 - 文件开头有 Shebang(如 `#!/bin/bash`),而 `.bashrc` 通常没有。 - **最佳实践**: 修改 `.bashrc` 后,始终用 `source ~/.bashrc` 重新加载配置,而非直接执行。 --- ### 总结 你遇到的权限问题是由于直接执行 `.bashrc` 文件导致的。推荐使用 `source ~/.bashrc` 来加载配置,这是安全且标准的做法。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值