使用 bash 别名自动执行远程 rsync 命令?

使用 bash 别名自动执行远程 rsync 命令?

我处理过许多服务器,这些服务器通常包含不受版本控制的文件和文件夹。这意味着我只能git remote add在本地计算机上处​​理文件。

考虑到这一点,当我注意到我需要某个文件夹的副本时,我经常浏览服务器,因此我编写了这个简单的 bash 命令来打印该命令,这样我就可以复制它并在本地机器上运行它。

#!/bin/bash
echo "sudo rsync -av -e ssh $(whoami)@$HOSTNAME:$(pwd) ./" 

它输出如下命令,我可以在家用电脑上运行它:

sudo rsync -av -e ssh user@hostname:/opt/lib/folder ./

现在我的问题是,如何将其转变为 bash 别名,以便我可以将其添加到每台服务器上的用户帐户?

答案1

您可以使用函数代替别名。只需将其放入~/.bashrc文件中即可,如下所示:

print_rsync ()
{
    echo "sudo rsync -av -e ssh $(whoami)@$HOSTNAME:$(pwd) ./"
}

函数比别名灵活得多,因为您可以执行任意数量的命令,甚至传递参数。

答案2

据我对 shell 别名的理解,它们是静态的,您不能在其中放置动态的东西,比如变量或命令。

只需将您的脚本复制到 PATH 中的某个位置/usr/local/bin,或者为您的用户创建一个 bin 文件夹:

mkdir ~/bin
echo 'export PATH="$PATH:$HOME/bin"' >> ~/.bashrc
. .bashrc # or reopen terminal
cp script.sh ~/bin

相关内容