昨日の日付を含む変数値でパスを作成する必要があります。 SFTPを使用してファイルをインポートする必要があります。これが私の試みです。
#/bin/bash
TS=$(date -d '30 mins ago' +"%Y%m%d")
sshpass -p '12#$' sftp -P 2222 [email protected] <<'END_SFTP'
get /newNE/PSData$TS* /data/processedfiles
END_SFTP
ただし、TS
データを取得するために日付値はリモートサーバーに渡されません。
File "/newNE/PSData$TS*" not found.
誰でもこの問題を解決するのに役立ちますか?
答え1
この文書内でパラメータ拡張(コマンド置換、算術拡張、および行連続処理を含む)を実行するには、区切り文字のどの部分も引用符で囲むことはできません。
#! /bin/sh -
ts=$(date -d '30 mins ago' +"%Y%m%d")
SSHPASS='12#$' sshpass -e sftp -P 2222 [email protected] <<END_SFTP
get /newNE/PSData$ts* /data/processedfiles
END_SFTP
また注:
ps
パスワードは、一部のアカウントログの出力、または時には一部のアカウントログで公開されているコマンドラインから渡されてはなりません。通常はプライベートと見なされるので、環境変数に渡すことをお勧めします。より良い方法は、公開鍵認証を使用することです。スクリプトへの読み取りアクセスが制限されており、スクリプトにパスワードが含まれていることを確認する必要があります。- shebangで始まり、
#!
通訳者へのパスが続きます。追加するのも-
良い習慣です。。もしそうなら、それはコメントにすぎないので、スクリプトを解釈するために#/bin/bash
shebangなしでシステムを実行することができます。sh
- ただし、ここではスクリプトに特別な内容がないため、その依存関係を使用して削除することをお勧めし
bash
ます(現在使用しているシステムでない限り、スクリプトを実行するときは少ないリソースを使用することもできます)。sh
bash
/bin/sh
bash
- ここでは実際にはGNU
date
(非標準-d
オプションの場合)に依存しています。これはbash
bash(GNUシェルですが、GNUではないシステムでも一般的です)よりも移植性がはるかに低いです。を使用している場合は、as(以前のバージョンの後ろ)をbash
定義してその依存関係を削除できます。ts
printf -v ts '%(%Y%m%d)T' "$(( EPOCHSECONDS - 30 * 60 ))"
printf -v EPOCHSECONDS '%(%s)T' -1
bash