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>

Encode or decode date in 3 characters

I have developed a new way to encode/decode dates within 3 characters by using base-36 format. What is a base 36 format? Base 36 or hexatridecimal is a positional numeral system using 36 as the radix. The choice of 36 is convenient in that the digits can be represented using the Arabic numerals 0-9 and the Latin letters A-Z. In simple language, base-36 format refers to series of 0-9 followed by A-Z characters, i.e., 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ; where each character refers to the position index in series. The concept can also be represents as shown in the below table Series Character Series Character Series Character Series Character 0 0 10 A 20 K 30 U 1 1 11 B 21 L 31 V 2 2 12 C 22 M 32 W 3 3 13 D 23 N 33 X 4 4 14 E 24 O 34 Y 5 5 15 F 25 P ...