如何在shell脚本中使用ctrl-D

时间:2010-10-16 11:28:48

标签: bash shell unix

我有一个bash shell脚本,需要ctrl-D才能打破终端。任何人都告诉我如何在shell脚本中使用它

例如

ssh host last --->显示登录到该主机的用户列表

我有不同的主机,输出被附加到一个最终,当我执行这个特定的shell脚本以及其他一系列命令时,我正在使用ctrl-D来查看输出

假设我的shell脚本是myscript.sh 执行myscript.sh

  

./ myscript.sh

CTL-d

与主机关闭的连接

显示

输出

相反,我想在我的脚本文件中使用ctrl-D

6 个答案:

答案 0 :(得分:3)

没有办法直接这样做。使用heredoc来代替stdin。

./someprog.sh << EOF
something here
EOF

答案 1 :(得分:2)

要检测脚本中的Ctrl-D并在其上运行自定义逻辑,您可以通过char读取输入char,并检查char键代码是否与Ctrl-D相对应。

这是一个代码示例:

IFS=
while true; do
    read -n 1 key
    line=$line$key
    printf -v key_code "%d" "'$key"
    if [ $key_code -eq 4 ]; then
        echo "Ctrl-D pressed!"
    fi
    if [ "$key" = '' ]; then
        echo "Line was $line"
        line=
    fi
done

答案 2 :(得分:2)

您可以尝试class Example extends React.Component{ constructor(){ const initialData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] super() this.state={ arr:initialData, // generate array of with the same size of show : initialData.map(() => false) } this.handleShow=this.handleShow.bind(this) } // pass parameter to show which visbile state to change handleShow(i){ this.setState ({ show[i]:!this.state.show[i] }) } render(){ return( <div> {/* map callback actually has three params: element, index, array using the index here to know which one is being called */} this.state.arr.map((x, i)=> { {/* making an inline event handler taht will call handle show */} <button onClick={ (evt) => this.handleShow(i) }> click me <button> {this.state.show[i]? <h1> I am text <h1> : false } } </div> ) }
exec <&-用于关闭文件描述符(ps:linux中的所有内容都是一种文件......)
&-正在关闭文件描述符0 = stdin - 也可以写为<&-

如果您在Linux机器中打开一个普通终端并输入0<&-,您会看到您的终端关闭/消失,就像您按exec <&-

一样

PS1:同样,^D.关闭stdout

PS2:如果您使用exec >&-关闭标准输入,则可以重新打开以使用exec <&-

之类的内容继续您的脚本

答案 3 :(得分:0)

#! /bin/sh
echo 'Enter one line at a time'
echo 'Press CTRL+D to finish'
cat >test.out
echo 'OK'

答案 4 :(得分:0)

为什么不告诉last你想看多少行?然后你不必用Ctrl + D打断它。例如,要查看10行使用:

ssh hostname "last -10"

答案 5 :(得分:0)

使用此

read  Input
#When ^D is used, read ends up with the exit code "1"
if [[ $? == 1 ]]
then echo 
fi