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

3
尝试为用户提供选择从crontab中删除的行的选项。我正在使用read命令获取用户的输入,但我无法正确打印带有行号的crontab -l的内容。我可以单独打印带有行号的内容,但在read命令内部,我不能这样做。
这是我正在使用的: read -p“根据行号选择要删除的计划程序:\n$(crontab -l | less -N)\n”removeLine 我可以执行: crontab -l | less -N 我还尝试将crontab -l | less -N放入变量中,并在read命令中使用该变量。
如果您对如何更好地完成此操作有任何其他建议,我愿意尝试。我只需要功能。
谢谢!

2
使用 cat -n 代替 less -N 怎么样? - tshiono
请将以下与编程相关的内容从英语翻译为中文。只返回翻译后的文本:谢谢! - becixb
请研究一下 shell 中常被忽视的 select 函数。它可能会给你想要的结果,但很难从你的问题中判断。祝好运。 - shellter
1个回答

4

请尝试以下方法。(此解决方案仅对代码进行注释,而非删除。您可以在满意后根据需要进行更改。)

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的代码,我们再次将其定义为awk变量并命名为var
  • awk代码的功能是:查找特定行并在开头添加一个#来插入注释,并简单地打印所有行。
  • 现在使用命令crontab -保存新的输出(由awk命令操作),并将其保存到crontab中。

1
++ed因其完整性和用户友好界面而备受赞誉。 - tshiono

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接