unix 如何在read命令中打印带有行号的crontab内容?

mi7gmzs6  于 2023-01-13  发布在  Unix
关注(0)|答案(1)|浏览(152)

尝试为用户提供一个从crontab中选择要删除的行的选项。我正在使用read命令来获取用户的输入,但我无法正确地打印crontab -l的内容和行号。我可以打印带有行号的内容,但在read命令中,我不能。
下面是我正在使用的:read -p "Choose which schedule to remove based on line number:\n$(crontab -l | less -N)\n" removeLine
我可以执行:crontab -l | less -N
我还尝试过将crontab -l | less -N放入一个变量中,并在read命令中使用该变量。
如果你有任何其他的建议,如何更好地做到这一点,我愿意接受任何东西。我只是需要的功能。
谢谢!

x7yiwoj4

x7yiwoj41#

请尝试以下操作。(此解决方案只会注解行而不会删除它们,一旦您对此感到满意,则可以根据您的需要进行更改)

cat script.ksh
echo "Here is the current crontab entries:"
crontab -l
echo ""
echo "Please enter the line number which you want to comment:"
read var

crontab -l | awk -v var="$var" 'FNR==var{$0="#"$0} 1' | crontab -
echo "Printing new cron entries here:"
crontab -l

代码的作用是什么?

  • 它将crontab的当前状态打印给用户,以便用户能够了解当前所有条目的内容。
  • 它为用户(运行此脚本的用户)打印一条消息,要求输入行号。
  • 当用户输入一个数字时,它将其保存到名为var的shell变量中。
  • 现在,它将shell变量var传递给awk的代码,在那里我们再次将其定义为一个名为varawk变量。
  • awk代码的作用是:它查找该特定行,并通过在行首添加#来插入COMMENT,然后简单地打印所有行。
  • 现在,通过使用命令crontab -保存新输出(由awk命令操作),它将立即将其保存到crontab

相关问题