gpt4 book ai didi

linux - 用于捕获输入、运行命令和打印到文件的 Bash 脚本

转载 作者:太空狗 更新时间:2023-10-29 12:06:56 25 4
gpt4 key购买 nike

我正在尝试做家庭作业,但它非常令人困惑。我不确定教授的示例是用 Perl 还是 bash 编写的,因为它没有标题。基本上,我只需要帮助解决问题的核心:捕获输入并输出它。这是作业:

  1. 在 session 中,提供包含工作目录的命令提示符,例如,$./logger/home/it244/it244/hw8$

  2. 接受用户的命令,执行它们,并在屏幕上显示输出。

  3. 在 session 期间,创建一个临时文件“PID.cmd”(PID 是进程 ID)以下列格式(索引:命令)存储命令历史记录:

    1: ls
    2: ls -l

  4. 如果脚本被CTRL+C(信号2)中止,输出一条消息“aborted by ctrl+c”。

  5. 当您退出日志 session 时(通过“exit”或CTRL+C),

    一个。删除临时文件

    打印 session 中的命令总数和成功/失败的命令数(根据退出状态)。

到目前为止,这是我的代码(运行不顺利,我不会尝试运行它):

  #!/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

最佳答案

这可以在 bash 或 perl 或其他语言中实现。

一些帮助您开始使用 bash 的提示:

问题1:命令提示符/logger/home/it244/it244/hw8
1) 确保用户 .bashrc 安装文件中的提示格式:参见 PS1 data for debian-like distros。
2) cd 进入 bash 脚本中的那个目录。

问题2:运行用户命令
1)获取用户输入

read -p "command : " input_cmd

2) 将用户命令运行到 STDOUT

bash -c "$input_cmd"

3)跟踪用户输入命令退出码

 echo $?

如果一切正常,应该以“0”退出(您也可以在命令手册页中找到退出代码)。

3) 如果退出代码为Ok,则跟踪命令PID

 echo $$ >> /tmp/pid_Ok

但请注意,问题是保留用户命令输入,而不是此处显示的 PID 本身。

4) 退出陷阱
看到 man trap 因为你误解了这个的用法:你可以创建一个在捕获的退出或 CTRL/C 信号上调用的函数。

5) 在 while 循环中递增索引(在退出代码条件下)

index=0
while ...
do
...
((index++))
done

我猜你有足够的钱开始你的家庭作业。

关于linux - 用于捕获输入、运行命令和打印到文件的 Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8234206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com