ローカルLinuxホストでリモートbashスクリプトを実行し、「echoコマンドが機能しない」を実行する

ローカルLinuxホストでリモートbashスクリプトを実行し、「echoコマンドが機能しない」を実行する

他のシステムでリモートで実行したいbashスクリプトがあります。リモートシステムのユーザーにcronjobを追加するだけです。

私はローカルシステムで実行しています。

ssh root@remote_system 'bash -s < /home/user_name/test2.sh'

これはリモートシステムで実行されるスクリプトです。

#!/bin/bash
set -x
#valhost=$(hostname)
if [ -d /home/user/junk ]
then
        touch /var/spool/cron/user_name
        crontab -l -u user_name > /home/user_name/mycron
        chmod +x /home/user_name/mycron
        echo "0 0 * * * /bin/find /home/user_name \( -name '*' \) -mtime +45 -delete" >> /home/user_name/mycron
        crontab -u user_name /home/user_name/mycron
elif [ -d /home/user_name/tmp ]
then
        touch /var/spool/cron/user_name
        crontab -l -u user_name > /home/user_name/mycron
        chmod +x /home/user_name/mycron
        echo "0 0 * * * /bin/find /home/user_name \( -name '*' \) -mtime +60 -delete" >> mycron
        crontab -u user_name /home/user_name/mycron
else
    echo "directory does not exist on" $HOSTNAME  > /home/user_name/jbossjunk
fi

ディレクトリが存在することを確認し、特定のエントリをcrontabに入れます。実際のリモートシステムでスクリプトを実行すると、スクリプトが正しく実行されます。ただし、ローカルで実行すると、エコーは「mycron」ファイルに出力されません。複数の場所を検索しましたが、機能する構文が見つかりませんでした。私は良い結果が得られずにいくつかの構文変換を試しました。リモートでスクリプトを実行するために使用できる「echo」行の構文を知らせる人はいますか?

ベストアンサー1

出力がどのように処理されるteeか。teeecho

if [ -d /home/user/junk ]
then
    touch /var/spool/cron/user_name
    crontab -l -u user_name > /home/user_name/mycron
    chmod +x /home/user_name/mycron
    tee /home/user_name/mycron <<-EOF &>/dev/null
    0 0 * * * /bin/find /home/user_name \( -name '*' \) -mtime +45 -delete
    EOF
    crontab -u user_name /home/user_name/mycron
elif

heredocこの例では、指定されたファイルを読み取りますtee。コマンド&>/dev/nullのSTDOUTとSTDERRを/ dev / nullに送信しますが、指定されたファイルへの書き込みにはtee影響しません。tee

おすすめ記事