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...

Launching a Jupyter Notebook with TensorFlow using Docker

This article will walk you through setting up a Jupyter Notebook environment with TensorFlow pre-installed using Docker. Docker allows you to run isolated containerized applications, providing a consistent environment regardless of your underlying operating system. Prerequisites: Docker: Ensure you have Docker installed and running on your system. You can download and install it from the official Docker website ( https://www.docker.com/ ). Steps: Start Docker: Open your Docker application (Docker Desktop for Windows/macOS or the command line if using Linux). Run the Jupyter Notebook container: For macOS/Linux: Open your terminal application and run the following command: docker run -it --rm -p 8888:8888 -v "${PWD}":/home/jovyan/work jupyter/tensorflow-notebook For Windows: Open your Command Prompt application and run the following command: docker run -it --rm -p 8888:8888 -v "%CD%":/home/jovyan/work jupyter/tensorflow-notebook Explanation of the command flags: -...

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>