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

KSH Setting alias name with argument in alias name

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

作为快速破解,我想保留 crontab 的历史记录 - 运行对这些进行比较会立即向我们展示如果有人同时在 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",我只希望我的程序 运行。

注意:所有用户都登录到相同的用户环境(即管理员),因此他们都在编辑相同的 crontab。

您可以使用与 crontab 命令完全相同的函数来执行此操作,该命令检查第一个参数是否为 -e.

(在您的 .kshrc 文件中的某处)

function crontab
{
  if [ "" = "-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),但对于函数,它不起作用,因此是最终的解决方法。