gpt4 book ai didi

bash - 尽管目录为非空,但使用 “for f in directory”时,变量名为空

转载 作者:行者123 更新时间:2023-12-02 14:13:26 25 4
gpt4 key购买 nike

作为bash脚本的一部分,我通过SSH连接到远程计算机。导航到目录后,我运行ls,确认找到了匹配的文件。但是,然后我尝试遍历文件并在文件上运行其他命令,并且变量现在为空。

码:

    echo "DOING STUFF!"
cd /mnt/slowdata/ls8_processing
ls
for f in *.tar.gz
do
echo $f
done

输出:
DOING STUFF!
LC080330242019031901T1-SC20190606111327.tar.gz
LC080330242019042001T1-SC20190606111203.tar.gz
LC080330242019052201T1-SC20190606111130.tar.gz
LC080330252019030301T2-SC20190606111021.tar.gz
LC080330252019031901T1-SC20190606120750.tar.gz
LC080340232019031001T1-SC20190606111056.tar.gz
LC080340232019041101T1-SC20190606111215.tar.gz
LC080340242019031001T1-SC20190606111201.tar.gz
LC080340242019041101T1-SC20190606111250.tar.gz
LC080340242019052901T1-SC20190606111331.tar.gz











从输出中可以看出,$ f正在拾取某些东西,因为空行数正确。但是,我希望解压缩无法执行的每个文件。

TIA。

最佳答案

您必须删除$的特殊含义,才能将它作为“$”传递给远程主机,否则在将命令发送到远程主机之前,变量将被扩展。

请记住,无论cd是否成功,for循环都会运行。

ssh server1 << EOF
cd /mnt/slowdata/ls8_processing
ls
for f in *.tar.gz
do
echo \$f
done
EOF

我的示例显示了区别:

script.sh
#!/bin/bash

f=123

ssh -i .ssh/keyauth.pem root@server1 << EOF
for f in ./*.log
do
echo "\$f"
echo "$f"
done
EOF

输出量
[edvin@server2 ~]$ ./script.sh
./sepap-install.log
123
./sepfl-upgrade.log
123
./sep-install.log
123
./sepjlu-install.log
123
./sepui-install.log
123

关于bash - 尽管目录为非空,但使用 “for f in directory”时,变量名为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56629023/

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