我有一个bash shell脚本,需要ctrl-D才能打破终端。任何人都告诉我如何在shell脚本中使用它
ssh host last --->显示登录到该主机的用户列表
我有不同的主机,输出被附加到一个最终,当我执行这个特定的shell脚本以及其他一系列命令时,我正在使用ctrl-D来查看输出
假设我的shell脚本是myscript.sh 执行myscript.sh
./ myscript.sh
CTL-d
与主机关闭的连接
显示输出
相反,我想在我的脚本文件中使用ctrl-D
答案 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