【问题标题】:Script adding alias in Linux在 Linux 中添加别名的脚本
【发布时间】:2021-12-31 15:36:42
【问题描述】:

我已经写了这个东西,但它不起作用。我不知道为什么。该脚本不会创建任何别名。这是我的脚本:

#!/bin/bash
ans=t

while [ $ans == y ]; do
    echo "Give alias name"
    read name
    echo "Give aliast instruction"
    read instruction
    echo "alias $name='$instruction'" 
    read ans
done

这可能是一个简单的问题,我对 Linux 完全陌生。

【问题讨论】:

  • 不要链接图片。将您的脚本行放在文本中。您可以使用 stackoverflow 编辑器格式化行脚本
  • 我还不能以其他方式添加图片
  • 不要放图片或链接到图片。把你的脚本。
  • 哦,好的,我试试
  • 你永远不会进入while循环:$ans is not "y"

标签: linux bash ubuntu script


【解决方案1】:

"==" 不用于测试相等。这是一个简单的等号:“=” 为了检查它是否不同,它是:!=

要定义别名,您必须使用命令别名。

而且你必须用命令执行脚本:

. ./script 

第一个点很重要,否则脚本将由子 shell 执行,别名定义将用于子 shell,而不是实际 shell。

#!/bin/bash
ans=t

while [ $ans != y ]; do
    echo "Give alias name"
    read name
    echo "Give aliast instruction"
    read instruction
    alias "$name=$instruction" 
    read ans
done

【讨论】:

  • 对不起,我最近回答了这个问题,但我真的忘记了。但是你帮了我很多。该脚本实际上是有效的,唯一的问题是我执行它的方式。使用 。 ./script 解决了这个问题。非常感谢
【解决方案2】:

在 unix 派生系统中,让进程(子进程)更改创建它的进程(父进程)的环境是不正常的。这与 windows 形成鲜明对比,windows 在历史上没有进程的概念。 Windows,尤其是它的命令环境,其执行模型归功于一个 1970 年代的系统,称为 CP/M,它是从中克隆出来的。

在 windows 中,batch 文件可以改变当前 shell 的环境;例如,cd /temp 将更改 shell 的当前目录。在 unix 派生系统中,这是不正确的。孩子不能改变父母的环境[当然有一个例外,下面];所以任何打开、关闭的文件、更改的目录、设置/重置环境变量等……都只会影响孩子。

所以,虽然你可能有一个包含 ``` 的脚本 别名再见=注销 `` 该别名只存在于脚本中。

例外是采购的概念。 unix shell 通常有一个名为source(缩写为.,如. myscript.sh)的命令,它不会创建一个新的进程来运行myscript.sh,只包含 myscript.sh 在当前 shell 中。

使用source,在整理完你在cmets中提到的错误后,就可以达到你需要的效果了。同时,您应该能够获取类似这样的内容 ``` 别名 bob="我需要,我需要,我需要"

and verify that it works.

【讨论】:

    猜你喜欢
    • 2012-11-07
    • 1970-01-01
    • 2021-12-01
    • 2018-09-17
    • 2022-01-20
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    相关资源
    最近更新 更多