8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

为什么非交互式 Bash shell 中的别名不起作用

user6685121 2月前

117 0

我正在尝试在非交互式 bash shell 中使用别名。我在 ~/.bashrc 中定义了别名,并设置了变量 BASH_ENV=~/startUpFile。startUpFile 的内容是源 ~/....

我正在尝试在非交互式 bash shell 中使用别名。我已在 中定义了别名, ~/.bashrc 并设置了变量 BASH_ENV=~/startUpFile 。startUpFile 的内容是 source ~/.bashrc .

当我执行命令时,我可以看到我的别名被识别 alias 。但是,如果我尝试使用 中定义的别名 ~/.bashrc ,Bash 无法识别它。它给了我未知命令错误。

使用 TCSH shell 可以很容易地做到这一点,因为该 ~/.cshrc 文件始终被读取。

有什么想法我可以用 Bash shell 来做到这一点吗?

帖子版权声明 1、本帖标题:为什么非交互式 Bash shell 中的别名不起作用
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由user6685121在本站《linux》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 该命令 shopt -s expand_aliases 将允许在非交互式 shell 中扩展别名。

  • 直到我将别名定义移至函数定义之前,它才对函数上使用的别名起作用;读取函数定义时别名似乎被扩展了!

  • 也许还要提到,即使这样,包含此语句的物理代码行中仍将无法使用别名,因此一行代码不起作用。一种解决方法是在命令 ssh remote $'shopt -s expand_aliases\nll' 之间使用换行符而不是分号

  • 另一种方法(从重复项 - 参见右侧的“链接问题”)是运行 bash -i 来强制 shell 进行交互。

  • .bashrc 仅由交互式 shell 处理。

    此外,当 shell 不是交互式时,别名不会展开,除非 expand_aliases 使用 设置 shell 选项 shopt 。当然,除非通过使用名称 sh 而不是 bash .

    经常使用别名的人通常会 .bashrc 在配置文件末尾添加别名,这样即使是非交互式 shell 也能找到别名。这可能不是最好的方法,但很常见。

    正是这样的情况让我相信,在 21 世纪,我们应该放弃 shell 脚本,转而采用 Python 这样的成熟语言。它更容易预测。

  • python 是一种糟糕的交互式语言。除非空格正是您所需要的,否则您无法剪切/粘贴随机的代码片段。不过,tclsh 却是一种非常不错的 shell —— 如果您输入的命令不是已知的 tcl 命令,它内置了执行 shell 命令的功能。此外,它的本质使交互式使用成为可能。然而,尽管我是 Tcl 的粉丝,但我还是更喜欢使用老旧的 bash 进行交互式使用。遗憾的是 tksh 从未达到逃逸速度。

  • /etc/profile 技巧仅适用于提供 --login 选项的非交互式 shell

  • 你说得对,Python 是一种糟糕的交互式语言。你应该使用 bash。但如果你必须编写脚本,那就用 Python 来写吧。由于它是一种面向对象的语言,你可以通过将代码片段编写为类、方法和函数来重用它们。脚本编写与编程相同,因此请使用 Python 等强大的编程语言。但对于交互,对于两个或三个命令管道,bash 就足够了。

  • 意见提醒!意见提醒!(并不是说 Python 本身有什么问题 —— 除了它是动态类型的 Oo —— 但 Ruby 和 Perl(还有谁知道呢)也是该市场的有力竞争者)

  • 您绝对可以在 bash 中编写“可重复使用”函数... # ThatsHot (){ echo '谢谢,美女。'; }; ThatsHot

  • 引用 12

    你必须

    shopt -s expand_aliases
    

    在你指向的文件中 BASH_ENV

  • 我遇到了类似的问题,最后我发现 ~/.bashrc 就是我所需要的。

    然而,在 Ubuntu 中,我必须注释掉停止处理 ~/.bashrc 的行:

    If not running interactively, don't do anything
    [ -z "$PS1" ] && return
    
  • 引用 14

    我更喜欢检查 $- 的交互性:[ $- == *i* ]] && myalias 只会在交互式 shell 中调用 myalias

返回
作者最近主题: