gpt4 book ai didi

linux - 在包含管道的 bash 中将字符串作为命令执行

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:37:19 32 4
gpt4 key购买 nike

我正在尝试列出一些 ftp 目录。我不知道如何让 bash 正确执行包含管道的命令。

这是我的脚本:

#/bin/sh

declare -a dirs=("/dir1" "/dir2") # ... and lots more
for d in "${dirs[@]}"
do
cmd='echo "ls /mydir/'"$d"'/*.tar*" | sftp -b - -i ~/mykey user@example.com 2>&1 | tail -n1'
$cmd
done

这只是输出:

"ls /mydir/dir1/*.tar*" | sftp -b - -i ~/mykey user@example.com 2>&1 | tail -n1
"ls /mydir/dir2/*.tar*" | sftp -b - -i ~/mykey user@example.com 2>&1 | tail -n1

如何让 bash 执行包括回显在内的整个字符串?我还需要能够解析命令的输出。

最佳答案

我认为您根本不需要使用 -b 开关。将要执行的命令指定为字符串就足够了:

#/bin/bash

dirs=("/dir1" "/dir2")
for d in "${dirs[@]}"
do
printf -v d_str '%q' "$d"
sftp -i ~/mykey user@example.com "ls /mydir/$d_str/*.tar*" 2>&1 | tail -n1
done

comments 中的建议(感谢@Charles),我将 printf%q 格式说明符一起使用,以防止目录名称中的字符可能被 shell 解释。

关于linux - 在包含管道的 bash 中将字符串作为命令执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25662841/

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