Does anybody else have a library of saved commands/scripts? What's in it? How do you organize it? Is there anything you'd want to share that other people might find helpful?

I do. I keep it in VS Code and store complicated (for me) stuff that I can't remember or worry I might not.

  1. Playlist download with yt-dlp with all my best settings, adding playlist index as track number.

  2. Ffmpeg metadata cleaner for music. Searching title for a bunch of specific strings to remove, setting the band, album, etc. and saving these in a new folder.

  3. Desktop file contents for when I need to create one for an appimage

  4. The script I used to bind audio output switching to a hotkey

  5. How to use ADB for when android blocks sideloading the normal way and I inevitably forget what Android Debug Bridge is or how to use it.

Linux Mint btw. Also yes, I am a noob.

you are viewing a single comment's thread
view the rest of the comments
[–] [S] 2 points 7 months ago (6 children)

This should be the next step for me. When you do aliased commands, can they take arguments? Like to download a playlist with yt-dlp, could i do download-playlist [URL]?

  • source
  • parent
  • hideshow 6 child comments
  • [–] 4 points 7 months ago

    When you do aliased commands, can they take arguments? Like to download a playlist with yt-dlp, could i do download-playlist [URL]?

    They don't take arguments in the sense that functions do but in bash at least they are passed on as part of the expanded string. Pasted from bash:

    alias argtest='echo arg is'  
    argtest foo  
    arg is foo  
    

    So yes you could alias your yt-dlp commands and invoke the alias with the URL.

  • source
  • parent
  • [–] 2 points 7 months ago (2 children)

    Yeah. This is my alias to download music from YouTube alias yt-dmus='yt-dlp -x --audio-format opus "$@"'

  • source
  • parent
  • hideshow 2 child comments
  • [–] 1 point 7 months ago* (last edited 7 months ago) (1 child)

    Aliases themselves do not take arguments. You can write Bash function for that case. Here is a "simple" example. I leave the comments there explaining the command too:

    treegrep

    treegrep() {
        # grep:
        #   --recursive             like --directories=recurse
        #   --files-with-match      print only names of FILEs with selected lines
        # tree:
        #   --fromfile              Reads paths from files (.=stdin)
        #   -F                      Appends '/', '=', '*', '@', '|' or '>' as per ls -F.
    
        grep --recursive --files-with-match "${@}" |
            tree --fromfile -F
    }
    

    yesnoYou can also set variables to be local to the function, meaning they do not leak to outside or do not get confused with variables from outside the function:

    # usage: yesno [prompt]
    # example:
    #   yesno && echo yes
    #   yesno Continue? && echo yes || echo no
    yesno() {
        local prompt
        local answer
        if [[ "${#}" -gt 0 ]]; then
            prompt="${*} "
        fi
        read -rp "${prompt}[y/n]: " answer
        case "${answer}" in
        [Yy0]*) return 0 ;;
        [Nn1]*) return 1 ;;
        *) return 2 ;;
        esac
    }
    

  • source
  • parent
  • hideshow 1 child comment
  • [–] [S] 2 points 7 months ago*

    This is what I ended up doing, and it works great. I knew about aliases, but didn't really use them at all - I didn't know about bash functions though.

    So now I have a few functions in .bashrc for short things and am just aliasing shell scripts for easy access to more complex tbings I don't want cluttering the file

  • source
  • parent