Skip to main content

Bash: How to uninstall custom go package via shell script?


The Go command line tool do not provide package cleaning option. At max it can remove object files and cached files which will remove executable file from bin folder and from pkg folder. But the source files would still be there.

So if you want to completely remove the package then you have to do it manually. Otherwise, create your own script to do this.  Alternatively, you can use below script. Just put it somewhere so that it could be globally accessible.

Here is a shell script that can completely clean the go package that you have installed by using go get <package> command.

File: goclean.sh

#!/bin/env bash

goclean() {
    local pkg=$1; shift || return 1
    local ost
    local cnt
    local scr

    echo "Clean removes object files from package source directories (ignore error)"
    go clean -i $pkg

    echo "Set local variables"
    if [ "$(uname -m)" == "x86_64" ]; then
        ost="$(uname)";
        ost="${ost}_amd64"
        cnt="${pkg//[^\/]}"
    fi

    echo "Delete the source directory and compiled package directory(ies)"
    if (("${#cnt}" == "2")); then
        rm -rf "${GOPATH%%:*}/src/${pkg%/*}"
        rm -rf "${GOPATH%%:*}/pkg/${ost}/${pkg%/*}"
    elif (("${#cnt}" > "2")); then
        rm -rf "${GOPATH%%:*}/src/${pkg%/*/*}"
        rm -rf "${GOPATH%%:*}/pkg/${ost}/${pkg%/*/*}"
    fi

    echo "Reload the current shell"
    if [ -e "~/.bashrc" ]; then 
        source ~/.bashrc
    elif [ -e "~/.bash_profile" ]; then 
        source ~/.bash_profile
    fi
}

if [[ "$1" == "" ]]; then 
    echo "Package name is missing!"
else 
    goclean $1
fi

exit 0

Usage

Save it in file named goclean.sh.

$ sh goclean.sh github.com/danwakefield/gosh

Alternatively, you can save it without extension as well like goclean. It would become more useful, if you would convert it into self-executable file.

$ chmod +x ./goclean 
$ goclean github.com/danwakefield/gosh

References

Originally, I found this code at stackoverflow.com provided by ecwpz91 but that didn't worked properly on my MacOS. So I have tweaked it a little bit to suite my machine.

If you're using MacOS then it would work like charm but I haven't tried it on any Linux machine. So guys, if you find it working properly at Linux then let the readers know about it in Comment section of this article.

Comments

Popular posts from this blog

Unlock protected blocks in Siemens SIMATIC Step 7

Recently I'd been called by Hindalco's Fabrication Plant division to unlock the protected blocks in Siemens SIMATIC Step 7. They were in need to unlock those blocks since an year because of 1 million Rupees of loss per month. They want to re-program those blocks but it was locked by the man who'd done the setup. From the people working in that department, I came to know that they were trying to call that man (someone from Italy) right here but he's not coming. Actually, what he'd done was that he'd locked some of the blocks and deleted the source file. And Siemens didn't provide any feature to unlock. Department people also told me that even the people working in Siemens don't know how to do it. Being a software engineer I know that any thing can be reverse engineered. So I took up the challenge. How did I unlocked the blocks? The first thing I'd done was searched about this software at Google and read about what is this software all about. Aft...

JS: The complete code example of Crypto.js (DES)

For one of the project I was trying to use crypto.js but I found that the Quick-start Guide have some deficiency in terms of library usage. So I am writing it here as a useful note for memory recap. <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/tripledes.js"></script> <script> var encrypted = CryptoJS.DES.encrypt("The secret message", "secret_key"); var e_msg = encrypted.toString(); console.log(e_msg); var decrypted = CryptoJS.DES.decrypt(e_msg, "secret_key"); var d_msg = decrypted.toString(CryptoJS.enc.Utf8); console.log(d_msg); </script>

Openmeetings Widget Wordpress Plugin

One of my client asked me to create a Wordpress plugin, so the first thing I did was to search for any existing plugin on which I can work on. Luckily I found one. It was developed by Shuki Vaknin. You can visit his plugin at:  http://wordpress.org/extend/plugins/openmeetings-integration-plugin-widget/ But I had little different requirement. So I modified the Shuki Vaknin's plugin. The modification is that every session has a unique username. I choose guest as default name while adding a timestamp along with guest keyword like guest34578689 . Download Link:  openmeetings-integration-plugin-widget.zip