【问题标题】:How to recover when stuck by executing wrong shell commands?执行错误的shell命令卡住时如何恢复?
【发布时间】:2016-11-24 18:40:22
【问题描述】:

我在 win7 64 位中使用 Git Bash 2.9.0-64 位。 这是我的shell代码

function sum1_x(){
a=$1
while [ $a -ge 1 ]; do
    sum=$[$sum + $a]
    a=$[$a - 1]
done

echo $sum
}

sum $1

在 Git Bash 中,我的类型历史如下:

wen@PC-WEN MINGW64 /d/git/ (dev)
$sh sum1_x.sh
退出
:q

退出
退出()
退出()

在我输入sh sum1_x.sh之后,我无法再执行任何shell命令。我尝试了很多命令,我知道我的脚本中有错误,但是我如何才能回到执行shell脚本面对这种问题?我现在什么都做不了。

【问题讨论】:

  • 也许你的脚本陷入了无限循环?
  • 可以直接停止吗?@AvihooMamka
  • 可以杀死终端,或者点击“x”按钮强制退出,也可以确定进程的PID并杀死它。
  • 对不起,点击'x'不起作用,但是CTRL + 'c'起作用。虽然我不知道原因。@AvihooMamka
  • 您似乎在没有任何参数的情况下启动了脚本,但是您的脚本中的函数 sum 期望参数。

标签: linux shell git-bash


【解决方案1】:

您的脚本有几个问题:

  1. 你有函数sum1_x,但你正在调用sum $1
  2. 您没有检查输入值是否存在,因此您陷入了无限循环

这是检查输入参数是否存在的更正脚本:

function sum1_x(){
a=$1
while [ $a -ge 1 ]; do
  sum=$[$sum + $a]
  a=$[$a - 1]
done

echo $sum
}

if [ -z "$1" ]; then  # check that input parameter is exists
echo "No input"
else
sum1_x $1
fi

如何停止程序:

  1. Ctrl + 'c'
  2. 打开新的mingw并通过ps -aux | grep "sum1_x.sh"找到程序的pid
    然后使用 kill pid 杀死程序

【讨论】:

  • 我尝试了您的第二个解决方案,但它返回 'ps:user x unknown'。@Arseniy
  • @YuanWen 试试 ps axf
【解决方案2】:

如问题所示,shell脚本包含许多错误。命令sh sum1_x.sh也是错误的。它应该被命令sh sum1_x.sh 9或类似的东西替换。修复这些错误后,它运行没有问题并且打印正确的总和。

但是我还是不知道怎么买shell脚本。还好,不小心按了Ctrl&c,又可以输入shell命令了。

【讨论】:

    猜你喜欢
    • 2015-01-29
    • 2023-03-03
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    相关资源
    最近更新 更多