我有一个用于自动执行 SVN 结帐的 bash 脚本。该文件的内容是:
#!/bin/bash
cd /var/www-cake
sudo svn checkout file:///usr/local/svn/bash_repo/repo/
然后,当我双击该文件时,它会问我要做什么,我会单击“在终端中运行”按钮,然后会弹出一个终端并询问我 SUDO 密码。我会输入它,脚本会执行,终端会关闭。
我想给出脚本成功运行的某种指示,所以我将文件编辑为如下所示:
#!/bin/bash
cd /var/www-cake
sudo svn checkout file:///usr/local/svn/bash_repo/repo/
echo "Head revision has been pushed to live server"
我希望终端现在保持打开状态并在之后告诉我消息。令我惊讶的是,它现在打开并立即关闭。该脚本确实执行了,我不再需要输入 SUDO 密码。
这是正确的吗?我不明白为什么会这样,似乎是一个安全问题。
sudo 会记住您的密码一段时间(默认为 15 分钟)。您可以通过运行使 sudo 忘记密码
sudo -k
当您直接从终端运行脚本时会发生什么?通常,如果输入 sudo 密码后会记住 15 分钟。如果您以图形方式运行它,终端提示将在完成执行后关闭。我没有可使用的 SVN 存储库 - 但是,我做了一个类似的测试,该测试将收集用户的输入并触摸该名称的文件。
从终端执行时:
然后双击:
提示在完成后关闭,但会执行请求。
要在执行脚本后保持提示打开,您可以尝试两件事:
read
命令添加为最后一行。要创建一个在终端中执行命令并保持窗口打开的启动器,请为 gnome-terminal 创建一个配置文件,比如 Hold,这正是这样做的(查看配置文件选项)并使用以下内容。