通过 Linux bash 读取远程文件并使用远程机器本身的内容
Read a remote file and use the contents on remote machine itself via Linux bash
我有以下 bash 脚本,它登录到远程机器并在那里创建一个文件,但是当我尝试逐行读取该文件时,它没有给我任何输出,尽管 cat 工作得很好。
以下是我一直在做的示例:
ssh $USER@$HOST bash -c "'
echo "Preparing list of files to be transferred...."
rm -rf /tmp/file_to_read.txt
# Creating a new file in following line
rsync -vunr $DIR $USER@$DESTINATION:$DIR | grep ".zip" > tmp/file_to_read.txt
#Following line gives me correct output
cat /tmp/file_to_read.txt
# But the variable FILENAME in following line has no value
while read -r FILENAME; do
echo "Copying $FILENAME" # <-- PROBLEM HERE
done < "/tmp/file_to_read.txt" '"
有什么建议吗?如果需要更多信息,请告诉我。
输出如下:
line1
line2
line3
Copying
Copying
Copying
预期输出为:
line1
line2
line3
Copying line1
Copying line2
Copying line3
首先,你的最后一行似乎有一些错误:
done < "/tmp/bundles_to_sync.txt" '" echo "Bye from $HOST"
替换为:
done < "/tmp/bundles_to_sync.txt"
echo "Bye from $HOST"
而且我认为您应该删除 tmp 之前的“/”以在您的代码中访问与上面相同的文件:
done < "tmp/bundles_to_sync.txt"
echo "Bye from $HOST"
您在 shell 脚本中遇到变量求值问题。
注意引用命令的方式将使变量在本地计算机或远程计算机上计算。
例如,以下内容使您的 local shell 替换变量 FILENAME,before 执行 ssh。只需致电 "bash -c ..." 即可了解这一点。
ssh $USER@$HOST bash -c "'
# ...
echo "Copying $FILENAME"
'"
有很多解决方案,可以通过更改引号(以失去脚本的 "input" 变量替换为代价),或者转义以防止被本地 shell.[=12 替换=]
ssh $USER@$HOST bash -c "'
# ...
echo "Copying $FILENAME"
'"
我有以下 bash 脚本,它登录到远程机器并在那里创建一个文件,但是当我尝试逐行读取该文件时,它没有给我任何输出,尽管 cat 工作得很好。 以下是我一直在做的示例:
ssh $USER@$HOST bash -c "'
echo "Preparing list of files to be transferred...."
rm -rf /tmp/file_to_read.txt
# Creating a new file in following line
rsync -vunr $DIR $USER@$DESTINATION:$DIR | grep ".zip" > tmp/file_to_read.txt
#Following line gives me correct output
cat /tmp/file_to_read.txt
# But the variable FILENAME in following line has no value
while read -r FILENAME; do
echo "Copying $FILENAME" # <-- PROBLEM HERE
done < "/tmp/file_to_read.txt" '"
有什么建议吗?如果需要更多信息,请告诉我。
输出如下:
line1
line2
line3
Copying
Copying
Copying
预期输出为:
line1
line2
line3
Copying line1
Copying line2
Copying line3
首先,你的最后一行似乎有一些错误:
done < "/tmp/bundles_to_sync.txt" '" echo "Bye from $HOST"
替换为:
done < "/tmp/bundles_to_sync.txt"
echo "Bye from $HOST"
而且我认为您应该删除 tmp 之前的“/”以在您的代码中访问与上面相同的文件:
done < "tmp/bundles_to_sync.txt"
echo "Bye from $HOST"
您在 shell 脚本中遇到变量求值问题。
注意引用命令的方式将使变量在本地计算机或远程计算机上计算。
例如,以下内容使您的 local shell 替换变量 FILENAME,before 执行 ssh。只需致电 "bash -c ..." 即可了解这一点。
ssh $USER@$HOST bash -c "'
# ...
echo "Copying $FILENAME"
'"
有很多解决方案,可以通过更改引号(以失去脚本的 "input" 变量替换为代价),或者转义以防止被本地 shell.[=12 替换=]
ssh $USER@$HOST bash -c "'
# ...
echo "Copying $FILENAME"
'"