I have a shell script in /usr/local/bin
#!/bin/sh
extract() {
if [ -z "$1" ]; then
# display usage if no parameters given
echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
elif [ -f "$1" ]; then
case $1 in
*.tar.bz2) tar xvjf "$1" ;;
*.tar.gz) tar xvzf "$1" ;;
*.tar.xz) tar xvJf "$1" ;;
*.lzma) unlzma "$1" ;;
*.bz2) bunzip2 "$1" ;;
*.rar) unrar x "$1" ;;
*.gz) gunzip "$1" ;;
*.tar) tar xvf "$1" ;;
*.tbz2) tar xvjf "$1" ;;
*.tgz) tar xvzf "$1" ;;
*.zip) unzip "$1" ;;
*.Z) uncompress "$1" ;;
*.7z) 7z x "$1" ;;
*.xz) unxz "$1" ;;
*.exe) cabextract "$1" ;;
*) echo "extract: '$1' - unknown archive method" ;;
esac
echo "extraction successful: $1"
else
echo "$1 - file does not exist"
fi
}
However, it doesn't run properly unless I do source /usr/local/bin/extract
in the current terminal. I know /usr/local/bin is in my path.
I have tried to change owner of the script to root:root to see if that makes a difference. File permissions are 755. I have tried to source /usr/local/bin again in my .zshenv but it was already in $PATH anyway. The only way I can make it work is if I use source /usr/local/bin/extract
directly. I have tried rebooting after various changes like this. I checked the file for bashisms in shellcheck. I tried with different shebangs, #!/usr/bin/env bash
and #!/bin/sh
. my /bin/sh is linked to dash.
I expected any script or binary in /usr/local/bin to work without sourcing it for each terminal sessions.