是否存在一个实用程序,在执行命令之前总是提示用户确认,类似于sudo
要求输入密码的方式?
答案1
您是否希望它在不输入额外命令的情况下工作,例如
$ rm file
或者只有当用户输入类似以下内容时
$ confirm rm file
或者仅当用户尝试运行某些命令时,例如
$ rm file
但不是
$ echo "Hello"
如果选择 1,则可以使用 zsh 中的 preexec 挂钩或 bash 中的 DEBUG 陷阱来完成。
/etc/bash.bashrc
如果是选项 2,请在或其他 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
}
如果选择 3,您可以修改confirm
上面的脚本,或者,某些命令在执行某些操作之前可以选择询问,例如rm -i
。您可以
alias rm='rm -i'
输入/etc/bash.bashrc
。
答案2
我玩了一下 bash 并找到了一种可以实现这一点的 hack。
#!/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
您可以将此脚本保存在 下,然后confirm-any-command.sh
将source
其保存在您的 中bashrc
。它将要求您确认将尝试执行的每个命令。
请注意,这只不过是一个概念验证黑客;我怀疑它以这种形式真的有用。如果你必须确认你输入的每个命令,你很快就会养成在每个命令后自动点击“是”的习惯。你对“命令结束”的心理映射将从仅仅变成Enter,,Enter-yes你Enter将把它作为一个整体输入,甚至不要试图花一些时间来验证你真的希望执行此命令。这会适得其反,对您没有帮助。
答案3
首先,打开终端。
然后输入
cd ~
touch .sure
chmod 700 .sure
接下来,打开 .sure 并将其粘贴到里面。
#!/bin/bash --init-file
PS1='> '
alias y='
$1
exit
'
alias n='killall Terminal'
echo ''
echo 'Are you sure? Answer y or n.'
echo ''
此后,关闭文件。
~/.sure ; ENTER COMMAND HERE
在继续执行命令之前,这将提示您是否确定。