所以我有一个 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'