bash - 在 heredoc 部分设置变量

标签 bash shell heredoc

我是一个 shell 脚本新手,所以我一定是在做一些愚蠢的事情,为什么这行不通:

#!/bin/sh

myFile=$1

while read line
do
ssh $USER@$line <<ENDSSH
ls -d foo* | wc -l 
count=`ls -d foo* | wc -l`
echo $count
ENDSSH
done <$myfile

应该打印两行,每行都应该有相同的值……但它们没有。第一个打印语句 [ls -d foo* | 的结果wc -l] 有正确的值,第二个打印语句不正确,它总是打印空白。我需要做一些特殊的事情来将值分配给 $count 吗?

我做错了什么?

谢谢

最佳答案

#!/bin/sh

while read line; do
  echo Begin $line
  ssh $USER@$line << \ENDSSH
  ls -d foo* | wc -l 
  count=`ls -d foo* | wc -l`
  echo $count
ENDSSH
done < $1

您的脚本的唯一问题是,当没有引用 heredoc 标记时,shell 会进行变量扩展,因此在发送远程命令之前,您的本地 shell 会扩展 $count。 ..

关于bash - 在 heredoc 部分设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39269271/

相关文章:

linux - Bash 脚本退出且没有错误

bash - 如何使文件名中的空格成为 bash while 循环中的条件?

bash - 查找和压缩数百万个文件的更有效方法

linux - 在 bash 函数中,如何将 stdin 放入变量中

循环错误的Linux shell脚本

bash - exec.Cmd让我发疯

c++ - 使用 exec 在 C++ 中执行 shell 命令

perl - 如何在 Perl 字符串中转义类似代码的东西?

string - ActionScript 3中的多行字符串文字

bash - 多行ssh命令,用于