通过 SSH 运行时别名未扩展

通过 SSH 运行时别名未扩展

所以我有一个 hadoop 的别名,它是在 bashrc 中定义的,我猜是 bashrc 涉及到了它。

alias hadoop=/usr/local/hadoop-2.7.2/bin/hadoop

现在,当我直接尝试运行它时,别名可以正常工作。但是当我尝试这个

ssh aditya@localhost hadoop

我收到以下错误消息

bash: hadoop: command not found

我也尝试了以下

shopt -s expand_aliases

但那没用。有人能帮帮我吗?

更新:

这个问题与我的问题不同,因为 ssh 命令不是我生成的,所以这个问题的解决方案并不能解决我的问题。ssh 命令是由我正在使用的库中的脚本生成和执行的。我不喜欢修改该脚本来更改命令,因为我并不完全了解该脚本的工作原理。

答案1

man ssh

如果指定了命令,它将在远程主机上执行,而不是在登录 shell 上执行。

这意味着 shell 将以 的身份运行您的命令sh -c。首先,这是在 中运行的dash,它是默认 shell 并符号链接到/bin/sh。因此,您的 别名bash首先不起作用。

其次,sh -c它是非交互式 shell。这意味着~/.bashrc如果您在那里定义了别名,它就不会提供您的源代码。

但是你的命令不起作用的主要原因是你运行

alias hadoop=/usr/local/hadoop-2.7.2/bin/hadoop

在里面当前外壳会话。它不会被导出,也不会被~/.bashrc作为源


这是另一种选择。在您的中创建别名~/.bashrc

alias run_hadoop='ssh aditya@localhost /usr/local/hadoop-2.7.2/bin/hadoop'

这样就简单多了,而不是只为命令定义别名,然后一次又一次地运行它。或者,run_hadoop.sh在你的主目录中创建一个包装脚本:

#!/bin/bash
exec /usr/local/hadoop-2.7.2/bin/hadoop

确保它可以执行chmod +x run_hadoop.sh。之后你可以做

ssh aditya@localhost 'bash /home/user/run_hadoop.sh'

相关内容