我有一个用于自动执行 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 密码。
对吗?我不明白为什么会发生这种情况,看起来像是一个安全问题。
答案1
sudo 会记住你的密码一段时间(默认 15 分钟)。你可以运行以下命令让 sudo 忘记密码sudo -k
答案2
当您直接从终端运行脚本时会发生什么?通常,如果 sudo 密码被输入一次,它会被记住 15 分钟。如果您以图形方式运行它,终端提示将在完成执行后关闭。我没有 SVN 存储库可供使用 - 但是,我做了一个类似的测试,它将收集用户的输入并触摸该名称的文件。
#!/usr/bin/env bash
echo -n "Hello, enter the file name: "
read NAME
touch $NAME
echo "All done"
从终端执行时:
然后双击:
提示完成后关闭但会执行请求的操作。
答案3
为了在执行脚本后保持提示符打开,您可以尝试两件事:
- 添加该
read
命令作为最后一行。 要创建一个在终端中执行命令并保持窗口打开的启动器,请为 gnome-terminal 创建一个配置文件,比如 Hold,它的作用正是如此(查看配置文件选项)并使用以下命令。
gnome-terminal --window-with-profile="Hold" -e "/path/to/script"