Comment by pmarreck

3 years ago

I have linux/macos-agnostic bash functions in my dotfiles that unify this to “clip” and “paste” (since “copy” is too close semantically to “cp”)

And I have one that unifies _both_ to `clip` so you can put the same command in both sides of the pipe, e. g. to turn a line-delimited blob on your clipboard to a space-separated one:

    clip | tr '\n' ' ' | clip

https://github.com/svieira/dotfiles/blob/a3654d6a194e3689978...

    # Use clipboard in shell pipelines
    # clip | xargs echo           # uses pbpaste
    # ps -A | grep search | clip  # uses pbcopy
    clip() {
      [ -t 0 ] && pbpaste || pbcopy
    }

  • So to check if there's anything sitting on stdin without reading it I've been using

    `if read -r -t0; then` # returns true if there is data but times out instantly so it doesn't consume any

    Is `[ -t 0 ]` more idiomatic? Apparently it fails on this case: function < file

    `read -r -t0` is Bash-only though and not POSIX, but it will work regardless of what type of data is on stdin