https://www.cnblogs.com/ilfmonday/p/ShellRemote.html
单命令执行: ssh user@remoteNode "cd /home ; ls"
今天 远程执行命令发现了一个问题:
当执行下面命令
ssh -o ConnectTimeout=60 -qn user@host "cd /tc1/fs_users/;pwd; echo '12'|OneScriptToRunl.sh -s" > test.log
发现错误: ksh: OneScriptToRunl.sh: not found [No such file or directory]
改成命令就可以执行:
ssh -q $User@$Machine ". ./.profile>/dev/null; echo '12' | sh $GF_HOME/OneScriptToRun.sh -s" > $LOG/QUERY_"$Name"_$NOW.log 2>&1 &
原因: #!/bin/ksh
. ~/.profile >/dev/null 是bash开始标准格式
1.) 点号 " . " 是shell的内部命令,其功能相当于另一个shell内部命令 "source" 。
它们的作用是:在当前的shell环境中解释执行shell脚本,而不会创建子shell进程。
有什么好处:这样做使得将要执行的shell脚本,可以访问当前shell环境中的所有已定义的变量,
以及shell脚本中设置的变量也会保存下来。
2.)波浪号 " ~ " 是指代当前登录的用户的主目录,即 /home/用户名/ ,所以 " ~/.profile " 就是指向用户主目录下的.profile文件。
.profile 文件是一个shell脚本文件,每当用户登录时就会自动被调用,而现在是由我们主动去调用它,通过点号 " . " 来调用。
3.) 右尖括号 " > " 是输出重定向符,表示将符号左边的命令执行结果输出到右边指定的文件中(只重定标准输出)。
4.)/dev/null 就像是一个回收站,任何写入该文件的内容都会被清除。
综合一下就是:执行当前登录用户主目录下的.profile脚本文件,屏蔽执行脚本过程中输出的信息,不包括错误信息。
多命令执行:
ssh user@host > /dev/null 2>&1 << eeooff
cd /directory
#touch abcdefg.txt
echo '12' | command.sh -s > test123456.out
exit
eeooff
echo done!
远程执行的内容在“<< eeooff ” 至“ eeooff ”之间,在远程机器上的操作就位于其中,注意的点:
- << eeooff,ssh后直到遇到eeooff这样的内容结束,eeooff可以随便修改成其他形式。
- 重定向目的在于不显示远程的输出了
- 在结束前,加exit退出远程节点