KSH使用别名中的参数设置别名

时间:2016-08-19 11:48:01

标签: crontab alias ksh

我在多用户环境中工作,多个用户可以(并经常)同时编辑crontab。这有时会导致一些用户的更改没有出现在crontab中的问题,因为另一个用户在几秒钟之后做了更改(对于旧版本的cron)。

作为一个快速的黑客,我想保留crontabs的历史 - 在这些上运行差异将立即向我们显示如果有人同时在crontab上工作则应该进行更改。

我创建了一个非常基本的脚本:

#! /bin/ksh

export datetime=`date +%Y%m%d_%H%M`
echo "Your username?: \c"
read username
crontab -l > /u01/app/oracle/dba/scripts/audit/cron_hist/"crontab_"$username"_"$datetime

export cronfile=/u01/app/oracle/dba/scripts/audit/cron_hist/"crontab_"$username"_"$datetime
### echo $cronfile
vi $cronfile

crontab < $cronfile

我的意图是每次用户在命令行上键入“crontab -e”时都必须运行脚本。

我想设置别名以使用“crontab -e”并执行脚本。但是,我已经意识到我不能使用带有参数的命令作为别名来使用别名。

有解决方法吗?如果专门调用“crontab -e”,我只希望我的程序运行。

注意:所有用户都登录到同一个用户环境(即admin),因此他们都编辑了相同的crontab。

1 个答案:

答案 0 :(得分:1)

你可以使用一个名为crontab命令的函数来检查第一个参数是-e

.kshrc文件中的某个地方)

function crontab
{
  if [ "$1" = "-e" ] ; then
     # call my script
     echo callscript first
  fi
  # call crontab in a subprocess
  ksh crontab $*
  # or maybe call with full path /sbin/crontab $*
}

注意:最后一行ksh crontab $*并非最佳,但我不记得或找不到调用真实命令的方法。使用别名,您只需反斜杠命令(\crontab),但使用它不起作用的函数,因此最终解决方法。