【发布时间】:2011-11-22 21:41:25
【问题描述】:
我正在尝试做家庭作业,这非常令人困惑。我不确定教授的示例是使用 Perl 还是 bash,因为它没有标题。基本上,我只需要帮助解决问题的核心:捕获输入并输出它。这是作业:
在会话中,提供包含工作目录的命令提示符,例如,
$./logger/home/it244/it244/hw8$接受用户的命令,执行它们,并在屏幕上显示输出。
-
在会话期间,创建一个临时文件“PID.cmd”(PID是进程ID)来存储命令历史,格式如下(索引:命令):
1:
ls
2:ls -l -
如果脚本被CTRL+C(信号2)中止,输出消息“被ctrl+c中止”。
-
当您退出记录会话时(通过“exit”或CTRL+C),
一个。删除临时文件
b.打印出会话中的命令总数以及成功/失败的命令数(根据退出状态)。
这是我目前的代码(运行不顺利,我不会尝试运行它):
#!/bin/sh
trap 'exit 1' 2
trap 'ctrl-c' 2
echo $(pwd)
while true
do
read -p command
echo "$command:" $command >> PID.cmd
done
目前当我运行这个脚本时,我得到了
command read: 10: arg count
是什么原因造成的?
======更新=========
好吧,我取得了一些进展,但它并不喜欢我的 bashtrap 或增量索引
#!/bin/sh
index=0
trap bashtrap INT
bashtrap(){
echo "CTRL+C aborting bash script"
}
echo "starting to log"
while :
do
read -p "command:" inputline
if [ $inputline="exit" ]
then
echo "Aborting with Exit"
break
else
echo "$index: $inputline" > output
$inputline 2>&1 | tee output
(( index++ ))
fi
done
【问题讨论】:
-
什么特别困扰着你?您没有太多工作要做,因为您似乎才刚刚开始触及表面。
-
添加评论 我只是在看我教授的幻灯片和示例,但它们很少,所以我认为至少可以让我输入和输出命令,但是我收到上面发布的错误并且无法 ctrl -c
-
越来越近了!我发布了一个在 SLES11SP1 上测试的工作示例。我相信你会逐行检查它,而不仅仅是把它上交。特别是,如果你按原样使用它,那里有一些代码来确定你必须向老师解释的 cwd . :-) 顺便说一句,+1 表示努力。