【发布时间】:2019-07-17 20:16:57
【问题描述】:
我正在尝试执行以下脚本以从文件中获取当前路径字符串并将其传递给下一个命令中的查找和替换。直接在主机服务器中运行时它工作正常,但是当尝试从 jenkins 构建步骤执行时,我遇到了找不到文件的失败。
错误:sed:无法读取 test.txt:没有这样的文件或目录
预期的结果是在“currentPath”存在的地方用“newPath”更新“test.txt”文件
代码:
user="testuser"
host="remotehost"
newPath="/testpath/"
filetoUpdate="./test.txt" # this is a file
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa ${user}@${host} "currentPath="$(sed -n '/^PATH='/p $filetoUpdate | cut -d'=' -f2)" ; echo "currentPath was "$currentPath"" ; sed -n 's|$currentPath|$newPath|g' $filetoUpdate"
【问题讨论】:
-
"文件中的当前路径字符串" 那是什么?也许一个例子会有所帮助?您是否正在尝试重新实现
basename或dirname? -
filetoUpdate 的变量替换在本地主机上完成。所以它在本地而不是在远程主机上查找 ./test.txt。
-
@YuriGinsburg - 好的,关于如何让它在远程服务器上查找文件有什么建议吗?我可以在远程服务器上的当前目录上执行 ls,它完美地列出了我感兴趣的文件。
-
@UlrichEckhardt - 在文件 test.txt 中,我有一行“PATH=/path/tp/data/directory/”我需要找到此路径并替换为新路径。
-
你有一堆代码,到底哪一部分不起作用?哪个部分起作用?请提供您从代码中提取的minimal reproducible example,它可以让任何人重现您的问题。特别是,解开 Jenkins 和 SSH 之间的关联之谜! edit你的问题来澄清这些事情。