【发布时间】:2016-06-24 17:54:12
【问题描述】:
我正在尝试通过 jenkins 机器在远程服务器上运行一系列命令。 这些命令执行以下操作
- 在远程服务器上创建目录
- 将一些文件从远程服务器复制到该目录中
我已经创建了下面的脚本,
servername=<remote server ip>
sshuserconnect() {
echo `/usr/bin/sshpass -p passwd ssh -o ConnectTimeout=5 -o UserKnownHostsFile=knownhosts -o StrictHostKeyChecking=no $*`
}
sshuserconnect user@$servername << ENDOFSSH
sqlplus -s /nolog << EOF > /home/user/output.txt
connect user/pwd@$servername:<port>/<DB schema>
select column1||','||value from table where column1 like 'param1';
EOF
version=`grep version /home/user/output.txt | cut -f 2 -d ","`
mkdir /home/user/${version}
ENDOFSSH
脚本失败并出现以下错误,
grep: output.txt: No such file or directory
Pseudo-terminal will not be allocated because stdin is not a terminal.
经过一些调试,我发现脚本仅对 grep 命令失败。将 grep 输出分配给版本变量失败。
我尝试了很多选择,如果这是正确的方法,我不会。谁能帮我解决这个问题?
【问题讨论】:
-
是的,这对我来说似乎是一个简单的错字。请注意,您可以使用 awk 代替
grep | cut:awk -F, '/version/ { print $2 }' output.txt。 -
两个建议,将 output.txt 更改为 ./output.txt,以防本地目录不是您的 PATH 的一部分。还将 ${Version} 更改为 ${version}。
-
@LAROmega,我已经编辑了问题并将文件路径更改为绝对路径。仍然错误保持不变。 @TomFenech,我尝试了你的方法,
version='awk -F, '/version/ { print $2 }' /home/user/output.txt'。仍然错误是一样的。