bash 命令产生奇怪的行为
a bash command generates strange behavior
我正在学习 bash 并且碰巧在 bash 中键入 var = "$(cat)"
,奇怪的是它进入并且 bash 提示消失,直到我使用 ctrl-c.
命令是什么var = "$(cat)"
?
bash-3.2$ var = "$(cat)"
^C
bash-3.2$
写 var=$(cat)
意味着您正在尝试存储执行命令 cat
的子 shell 的输出。但是,不带参数执行 cat
相当于 cat STDIN
(也与 cat -
相同),如果您没有正确终止输入流,cat
仍会读取从 STDIN
直到它被中断(这就是为什么你认为你的提示消失了,但实际上,你在子 shell 中)。
由于您将 SIGINT
信号 (CTRL+C
) 发送到(子)进程,因此命令和子 shell 以非 0 状态退出(您可以检查在 var=$(cat)
之后执行 echo $?
的退出状态对于被 SIGINT
终止的进程应该等于 130)。或者,您可以尝试向上述子 shell 的 STDIN
写入一些内容,然后发送 CRTL+D
,当在给定终端上的一行开头键入时,表示输入结束,而不是CTRL+C
。最后,您可以键入 echo $var
以检查变量赋值是否按预期工作。
我正在学习 bash 并且碰巧在 bash 中键入 var = "$(cat)"
,奇怪的是它进入并且 bash 提示消失,直到我使用 ctrl-c.
命令是什么var = "$(cat)"
?
bash-3.2$ var = "$(cat)"
^C
bash-3.2$
写 var=$(cat)
意味着您正在尝试存储执行命令 cat
的子 shell 的输出。但是,不带参数执行 cat
相当于 cat STDIN
(也与 cat -
相同),如果您没有正确终止输入流,cat
仍会读取从 STDIN
直到它被中断(这就是为什么你认为你的提示消失了,但实际上,你在子 shell 中)。
由于您将 SIGINT
信号 (CTRL+C
) 发送到(子)进程,因此命令和子 shell 以非 0 状态退出(您可以检查在 var=$(cat)
之后执行 echo $?
的退出状态对于被 SIGINT
终止的进程应该等于 130)。或者,您可以尝试向上述子 shell 的 STDIN
写入一些内容,然后发送 CRTL+D
,当在给定终端上的一行开头键入时,表示输入结束,而不是CTRL+C
。最后,您可以键入 echo $var
以检查变量赋值是否按预期工作。