在SSH远程服务器的Heredoc中使用别名

时间:2018-07-10 00:35:58

标签: linux ssh heredoc

我的〜/ .bashrc中有一个函数,定义为Follow

function sshpushg() {
    iro <<EOF      #iro is sshpass -p *** ssh addressOfServer
    ssh computer01 #connect to my remote computer
    Work           
    st
    add
    git commit -m "pushing automatically by ssh"
    pushg
    EOF
}

在我的远程帐户中,我的〜/ .bashrc文件包含以下几行

alias Work=' cd ~/Documents/Work'
alias st='git status'
alias add='git add -A'
alias pushg='git push origin master'    

我希望sshpushg函数自动将Work文件夹中的所有内容添加,提交并推送到github,但是当我运行命令时出现错误:

-bash: line 1: Work: command not found
-bash: line 2: st:  command not found
-bash: line 3: add: command not found

然后出现一堆错误,表明这不是git存储库,因为未执行Work并且我不在正确的目录中。

如何在函数sshpushg中使用在远程帐户上设置的别名?显然,我可以不键入别名而重新键入所有命令,但是有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

使用输入脚本运行ssh时,它不会创建终端,并且其外壳程序也不会运行~/.bashrc。您可能可以通过使用ssh computer01 bash -i强制使用交互式shell来解决此问题,但这将尝试将输入文件用作终端并给您带来另一组错误:

$ ssh my-server bash -i <<< 'aliastest'
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
che@my-server ~ $ aliastest
alias works
che@my-server ~ $ exit

您可能可以通过以某种方式伪装终端来解决此问题,但是最简单的方法是写出命令,或者通过在服务器上创建脚本然后运行它,按照以下步骤

#!/bin/bash
cd ~/Documents/Work
git status
git add -A
git push origin master

然后运行它

sshpass -p *** ssh addressOfServer ssh computer01 ~/path/to/my/script.sh