uli*_*tko 10
我玩过 bash 并想出了一个可以使这成为可能的黑客。
#!/bin/bash
debug_trap () {
echo "executing $BASH_COMMAND"
echo "Allow?"
select choice in yes no
do
if [ "$choice" = "yes" ]
then break
elif [ "$choice" = "no" ]
then return 1
fi
done
}
shopt -s extdebug
trap debug_trap DEBUG
Run Code Online (Sandbox Code Playgroud)
您可以保存下,说这个剧本,confirm-any-command.sh
并source
在它bashrc
。它将要求确认您将尝试执行的每个命令。
请注意,这只不过是一个概念验证黑客;我怀疑它在这种形式中真的有用。如果你必须确认你输入的每一个命令,你很快就会养成在每个命令后自动点击“是”的习惯。您对“命令结束”的心理映射将从仅更改Enter为Enter, yes, Enter- 您将输入它作为一个整体,甚至不要尝试花一些时间来验证您是否真的希望执行此命令。这是适得其反的,不会帮助你。
你想让它在不输入额外命令的情况下工作吗,例如
$ rm file
Run Code Online (Sandbox Code Playgroud)
或者只有当用户输入类似
$ confirm rm file
Run Code Online (Sandbox Code Playgroud)
或者仅当用户尝试运行某些命令时,例如
$ rm file
Run Code Online (Sandbox Code Playgroud)
但不是为了
$ echo "Hello"
Run Code Online (Sandbox Code Playgroud)
如果选择 1,则可以使用 zsh 中的 preexec 钩子或 bash 中的 DEBUG 陷阱来完成。
如果选项 2,在/etc/bash.bashrc
或其他 shell 启动文件中放入类似的内容。
confirm() {
echo -n "Do you want to run $*? [N/y] "
read -N 1 REPLY
echo
if test "$REPLY" = "y" -o "$REPLY" = "Y"; then
"$@"
else
echo "Cancelled by user"
fi
}
Run Code Online (Sandbox Code Playgroud)
如果选项 3,您可以修改confirm
上面的脚本,或者,某些命令可以选择在做某事之前询问,例如rm -i
. 你可以放进
alias rm='rm -i'
去/etc/bash.bashrc
。
归档时间: |
|
查看次数: |
8712 次 |
最近记录: |