私はftpセッションを自動化していますが、stdoutを取り出してファイルにパイプしたいと思います。私は3つのオプションが出ている:インライン<< EOF ... EOFを使用すると、どこにファイルをパイプするのですか?
オプション1
ftp -i ftpServer >stdoutFile <<EOF
cd somewhere
get something
EOF
オプション2
ftp -i ftpServer <<EOF >stdoutFile
cd somewhere
get something
EOF
オプション3
ftp -i ftpServer <<EOF
cd somewhere
get something
EOF > stdoutFile
私はそれらのすべてで構文エラーが発生しているように見えますが、どれも動作していないようです。
私は何とか前にうまく動作しているように感じますが、私はどのように覚えていません。
編集
構文エラーがまだ存在しています。あたかもEOFというhere-documentでこのメソッドを使うと、あたかもスクリプトのどこにでもそのdelimeterを使うことができないように見えます。
実際に生成される正確なエラーは、実際には次のif文終了時のエラーです。たとえば、
if [ condition ]
then
ftp -i ftpServer >stdoutFile <<EOF
cd somewhere
get something
EOF
fi
if [ something else ]
then
somethingWithaHereDoc <<EOF
foo
bar
EOF
fi
私はSyntax error near unexpected token 'fi'
が最後のfiの行を指しています。
現在、FTP接続がハングしています。私は〜/ .bashrcファイルを使用していますが、別のコンソールでは動作しますが、スクリプトでは動作しません。私は誤ってディレクトリに名前付きパイプを持ち、ftpセッションがハングする原因となりました。すべてが解決されました。ありがとう!
私がこれをやっているのは、ftpサーバから特定のファイルをダウンロードしたいからです。 ftpセッションを終了してbashで処理し、別のftpセッションを開始して、選択したファイルを取得します。
オプション1と2の両方の仕事をする必要があります。 –
取得している構文エラーとそのコンテキストを表示してください。オプション3は確実に失敗しますが、最初の2つはOKです。 – cdarke
上記の最初と2番目のオプションは正しいですが、あなたの 'EOF'が行の唯一のものでなければなりません:先導タブもスペースもなく、末尾のジャンクもありません。あなたが見ている問題は、bashがターミネーターを認識していないことです。 – gilez