2016-08-19 93 views
0

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

作为一个快速破解,我想保留crontabs的历史记录 - 运行diff的这些将立即向我们显示应该在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。

+0

您可以删除脚本中的别名。它在ksh中是否为unalias?不确定。 –

+0

让 - 弗朗索瓦法布尔 - 我的剧本里没有别名。我想要做的是使用别名“crontab -e”将set脚本作为别名。显然我可以将别名设置为“crontab”,但这并不理想 – Huskie69

回答

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),但功能不起作用,因此是最后的解决方法。

+0

作品一种享受!谢谢。我稍微修改它以使用else,否则在初始脚本运行后它仍然运行crontab -e。 – Huskie69

+1

我很放心,因为我只用MSYS bash测试过。但是我在上个世纪的旧版HP ksh脚本中使用了很多xp :)这也是当我了解到别名无法使用参数时,函数可以。 –