前言: 之前从未创建过 shell bash 脚本。所以,首先,我甚至不确定这是否是适合这项工作的工具。如果不是,请首先告诉我,您认为最好的替代方案是什么。
语境: 每次尝试设置网站时,我经常会执行重复任务。我希望通过运行一两个命令来自动执行这些任务。更新:共享主机基于 Unix。本地计算机是 Mac OS X,因此也是基于 Unix。
作为示例,以下是我经常执行的一些任务(命令):
SCP-365:
scp ~/local/path/general_web_app/.bash_profile [email protected]:/home/HOSTNAME/.bash_profile
scp ~/local/path/general_web_app/.gitconfig [email protected]:/home/HOSTNAME/.gitconfig
直接 SSH:
ssh [email protected]
cd /www/www/
git init
git add .
git commit -a -m "first commit"
cd ~/private/ && mkdir repos
编辑、查找、替换、保存并退出:
pico ~/remote/private/repos/general_hub.git/hooks/post-update
replace "user" WITH "hostname";
hit "cmd x"
hit "y"
据我所知:这些是我希望脚本执行的不同类型的任务。
问题 1: bash 脚本可以直接处理 SCP、SSH 以及 EDIT FIND REPLACE SAVE AND EXIT 吗?
问题2: 应该向运行脚本的用户询问一些参数,并且应该将这些参数放在一些文件中(替换存在的特定关键字) - 这可以实现吗?
问题 3: 我们应该将文件复制到远程并直接在远程进行编辑,还是应该在本地抓取文件,“在临时位置本地编辑它们”,然后将它们放在服务器上?我认为第二种方法要复杂得多。
有什么例子可以供我参考吗?
提前致谢
答案1
简短的回答是:全部是。
我来举几个例子。下面是一个在远程机器上执行本地 bash 脚本的命令示例:请注意,不需要将其复制到远程机器:
ssh user@remote_pc 'bash -s' < local_file.sh
这非常简单,可能不值得编写整个脚本来处理它,但是如果您愿意,也可以通过脚本来安排。但是,要使其工作,您必须设置passwordless login
ssh 连接。如果您不这样做,脚本中的 ssh/scp 命令将停止,因为它们会等待您输入远程用户的密码。
至于编辑等,Unix 有终极流编辑器sed
,它的作用就是:例如,命令
sed 's/a/A/g' old_file.txt > new_file.txt
将小写字母替换a
为大写字母A
,并将输出放入新文件中。这也可以轻松编写脚本。
至于参数,shell 脚本可以从文件读取参数,也可以查询环境以获取某些参数。无需询问用户的登录名,
echo $USER
whoami
会执行此操作,即使在脚本内也是如此。家庭住址echo $HOME
等也一样。
至于您的第三个问题,我希望我的第一个回答也能对此提供答复:第一个命令允许您在远程服务器上执行您在本地编辑的脚本文件,甚至不必将其复制到那里。
欢迎来到 *Nix 的世界,在这里你的愿望就是我的命令。
抱歉,我忘了:这个命令
export -p | more
将显示所有可用的局部变量(技术上,它们已被 出口)。