从本地 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.由于tee处理输出的方式与echo.

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 发送tee到 /dev/null,但不影响tee写入指定文件。

答案2

您有七个引用语句/home/user_name/mycron (顺便说一句,我假设那是,而不是字面上的),还有一个只是简单引用 (即,相对路径名而不是绝对路径名)。如果您运行脚本/home/user_name/mycronuser_namemycron /home/user_name,它们是等价的。如果您从 运行脚本/root,则该echo语句将写入到/root/mycron

PS 你绝对不需要这样做chmod +x /home/user_name/mycron

相关内容