带有read的函数定义阻塞了shell

时间:2017-01-31 10:32:20

标签: bash shell

我正在尝试在Bash中使用以下函数定义来设置会话式git-environment变量。如果我来源这个,我的Bash块,我只能用CTRL + D来打它,然后我得到一个无法使用的shell(没有可能的命令)。我猜,读取的东西是阻塞的。最初的版本甚至还有一个“while true; do”,但更糟糕的是,这会对CPU造成严重破坏。 因此,出现了两个问题:

  1. 如何达到让此功能正常工作的目标?
  2. 为什么只定义函数但不调用它时会弹出问题?

    function git() {
        echo "Running BETTER git..."
        if [ -z "$GIT_COMMITTER_NAME" ]; then
            echo -n "Git User: "
            read -e UNAME
            if [ "$UNAME" == "user1" ] -o [ "$UNAME" == "user2" ]; then
                echo "Hello $UNAME, you will be set as committer for this git session"
            else
                echo "Invalid User"
            fi
            GIT_COMMITTER_NAME=$UNAME
            export GIT_COMMITTER_NAME
            GIT_COMMITTER_EMAIL=$UNAME@company.com
            export GIT_COMMITTER_EMAIL
            GIT_AUTHOR_NAME=$GIT_COMMITTER_NAME
            export GIT_AUTHOR_NAME
            GIT_AUTHOR_EMAIL=$GIT_COMMITTER_EMAIL
            export GIT_AUTHOR_EMAIL
        fi
        echo "  using git user: $GIT_AUTHOR_NAME / $GIT_AUTHOR_EMAIL"
        /usr/bin/git "$@"
    }
    

1 个答案:

答案 0 :(得分:1)

只是问第二个问题让我自己解决了问题的根源:为什么只是函数的定义导致了麻烦?因为git实际上在我的环境中被>调用: 改变

.abc{
border-radius: 20px;
background-color: #f2f2f2 ;
padding: 20px;
opacity: 0.8;
margin-top: -50px;
margin-left: -100px;
position: fixed;
top: 30%;
left: 45%;
}

table {
border-collapse: collapse;
width: 100%;
}

th, td {
text-align: left;
padding: 8px;

}

tr:nth-child(even){background-color: #f2f2f2}

td {
background-color: #ffa64d;
color: black;

}

<h1><samp>Student Details</samp></h1>
<p> <%= link_to "Add new record", new_user_path %></p>
<table border=3>
<tr>
  <th>Firstname</th>
  <th>SecondName</th>
  <th>Address</th>
  <th>Action</th>
  </tr>
<% @users.each do |user| %>
<table border=3>
<tr>
   <td><%= user.firstname%></td>
   <td><%= user.lastname%></td>
   <td><%= user.address %></td>
   <td><%= link_to "Delete",user,:method =>:delete,
  data:{:confirm => 'Are you Sure?'} %><br><%= link_to "Edit", edit_user_path(user) %></td>
</tr>
</table>
<% end %>

正在解决这个问题。 $ b1是对bash中的每个命令进行评估的,因此在每个提示符下都会发出一个git命令,从而调用我定义的函数。

编辑:我还必须更换所有出现的&#34; git&#34;用&#34; / usr / bin / git&#34;在我的/etc/bash_completion.d/git-prompt中。现在我可以别名&#34; git&#34;使用该功能,它可以正常工作。