gpt4 book ai didi

linux - 在 shell 脚本中循环在远程服务器上不起作用

转载 作者:太空狗 更新时间:2023-10-29 11:18:24 25 4
gpt4 key购买 nike

代码尝试从我的本地服务器通过 ssh 连接到远程服务器并运行一些命令。

ssh root@$remoteip 'bash -s' <<END3               
gcdadirs=`strings binary | egrep '.gcda$'`
for dir in ${gcdadirs[@]}; do
directory=$(dirname ${dir})
echo $dir >> dirstr.txt
mkdir -p $directory
chown $root:$root $directory
chmod 777 $directory
done
END3

上面的代码在远程服务器上创建了一个工作正常的目录结构。

我想压缩相同的目录结构。所以我使用与上面相同的逻辑。

ssh root@$remoteip 'bash -s' <<END3   
touch emptyfile
tar -cf gcda.tar emptyfile
gcdadirs=`strings binary | egrep '.gcda$'`
for dir in ${gcdadirs[@]}; do
tar -rf gcda.tar $dir
done
END3

上面的代码应该创建一个包含 for 循环返回的所有目录的 tar。我通过将代码复制到远程服务器并在那里运行来尝试代码逻辑并且它有效。但是,如果我从本地服务器通过 ssh 连接到远程服务器并尝试它不会进入 for 循环。它不会在第二行用空文件创建的 tar 文件中附加任何内容。

最佳答案

尝试<<'END3'

注意 END3 周围的引号,它们防止 here-document 中的 shell 替换。您希望将 $ 符号传输到 ssh 连接的另一端,而不是在本地解释。反引号也一样。


从评论中提取为已接受的答案。作为社区 wiki 发布

关于linux - 在 shell 脚本中循环在远程服务器上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32143787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com