ヒアドキュメントの部分はftpコマンド実行前に評価されるので無理でしょう。
ステップを分ければいいのでは?
shell
1
2files=$(ftp <<EOD
3...
4dir
5...
6EOD
7)
8
9for file in $(files)
10do
11 ftp <<EOD
12 delete ${file}
13EOD
14done
15
16...
追記。
別案。files変数からgetとdeleteのコマンドを生成して、まとめてftpに食わせる。
何度も申し訳ありません。
こちらの案ですが、どのようにfile変数からコマンドを生成するのでしょうか?
試しに
getCommnd=("get test.jpg" "get test2.jpg")
として、ftpのヒアドキュメントのget使用箇所に
${getCommnd[@]}
として置換えてみましたが、コマンドと認識されませんでした。
ftp環境なんて身近に建っていないので、ローカルなファイルを例に。
shell
1$ ls hoge
2a b c d e f
shell
1$ cat xx.sh
2#!/bin/sh
3
4files=$(cd hoge; ls)
5
6(
7echo user id password
8
9for f in ${files}
10do
11 cat <<EOD
12get hoge/${f} local/${f}
13del hoge/${f}
14EOD
15done
16
17echo bye
18) | cat
shell
1$ sh xx.sh
2user id password
3get hoge/a local/a
4del hoge/a
5get hoge/b local/b
6del hoge/b
7get hoge/c local/c
8del hoge/c
9get hoge/d local/d
10del hoge/d
11get hoge/e local/e
12del hoge/e
13get hoge/f local/f
14del hoge/f
15bye
xx.shの最後のcatをftp -nとかに変える。
なお、ftpのサブコマンド自体、さっぱり思い出せないので内容はとても適当です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/06 07:43
2021/08/06 13:07
2021/08/11 07:15 編集
2021/08/12 00:36