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
),但对于函数,它不起作用,因此是最终的解决方法。
我在多用户环境中工作,多个用户可以(并且经常)同时编辑 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
),但对于函数,它不起作用,因此是最终的解决方法。