特定のフォルダを調べて、そのフォルダにファイルがあるときに電子メールを送信するスクリプトを作成する必要があります。
同様の操作を試しましたが、コマンド変数とフォルダの印刷にエラーが発生しました。
for folder in "FOLDER1" "FOLDER2"; do
command=`ssh -q user@host "ls /usr/local/username/`{print $folder}` | wc -l"`
#echo $command
if [ $command -ne '0' ]
then
#send error email
fi
done
答え1
以下を試してください。
command=$(ssh -q user@host 'ls "/usr/local/username/'$folder'" | wc -l')
実際、逆引用符を入れ子にすることはできません(そしてなぜそうするのかわかりません)。
答え2
これははるかに簡単かもしれません。何をしたいのかわかりません{print $folder}
。ここで中括弧は意味がありません。$folder
文字列に含めたい場合$folder
。出力を解析しないでください。ls
、ほとんど動作しませんし、しばしば失敗します。
if ! ssh user@host "test -e '/usr/local/username/$folder'"; then
# the file doesn't exist
リモートシェルでは、ファイル名を引用符で囲む必要があります。私は上記のコマンドでリモートコマンドのファイル名を一重引用符で囲んでこの問題をほとんど解決しましたが、これは$folder
一重引用符自体が含まれていない場合にのみ機能します。ローカルシェルがbash、ksh93、またはzshの場合は、代わりに一重引用符を使用してください。
q=\'\\\'\'
if ! ssh user@host "[ -d '/usr/local/username/${folder//\'/$q}' ]"; then
より便利な別の方法は、以下を使用してリモートファイルシステムをマウントすることです。sshfs通常のファイルシステムインタフェースを介して処理します。同時に多くのリモートサーバーを使用しない限り、この方法をお勧めします。
mkdir /path/to/mount/point
sshfs user@host /path/to/mount/point
if ! [ -d "/usr/local/username/$folder" ]; then