脚本别名执行失败,而手动别名执行成功而没有问题

脚本别名执行失败,而手动别名执行成功而没有问题

我执行了一个远程 Bash 脚本bash <(curl -s URL/script.sh | tr -d '\r'),该脚本执行以下 3 个操作:

  1. 将另一个带有别名列表的脚本(aliases.sh)下载到当前目录。
  2. 执行source ./aliases.sh命令。
  3. 在获取脚本后执行列表中的别名之一。此别名是rss,旨在重新启动 Web 服务器服务。

由于某种原因,脚本的别名执行总是失败,而手动执行总是成功。

当前状态是,rss别名(实际上还有列表中的所有其他别名)在执行时将被忽略并被视为“不存在”,script.sh即使它们的文件aliases.sh是源文件,并且如果我手动执行它们(键入并按 Enter),rss所有其他别名的执行都会完美成功。rss

为什么存在这种“执行歧视”,导致脚本别名执行失败,而手动别名执行却成功?

我在几个不同的 Ubuntu 环境中重现了这个问题。我无法解释这一点,希望您能对此发表看法。

答案1

如果您从 shell 脚本“a”运行 shell 脚本“b”,则脚本“b”中设置的所有别名和变量仅适用于该 shell 环境,它们不会传回 shell 脚本“a”。

答案2

别名是为了交互使用而创建的。在脚本中,您可以通过在脚本本身中输入相应的命令来获得相同的结果(与使用别名获得的结果相同)。

如果想多次使用它,可以创建一个函数,并在脚本中调用它。

例子:

alias alidr='sudo lsblk -o model,name,size,fstype,label,mountpoint'

可以在 bash 脚本中替换为

function flidr {
 sudo lsblk -o model,name,size,fstype,label,mountpoint $*
}

并且可以在脚本中调用它

flidr

或仅显示带有参数的指定驱动器

flidr /dev/sda /dev/sdb

相关内容