Kopiowanie w Terminalu

04/05/2015, 21:20 · · · 0

Tworząc skrypty w OS X mamy czasem potrzebę skopiowania wyników. Najczęściej korzysta się wtedy z komendy pbpcopy, ale „bash’owy ninja” — Brett Terpstra na swoim blogu opublikował niedawno skrypt, który usprawnia kopiowanie.

Wspomniany skrypt przedstawia się następująco:

copy() {
    if [[ $1 =~ ^-?[hH] ]]; then

        echo "Intelligently copies command results, text file, or raw text to"
        echo "OS X clipboard"
        echo
        echo "Usage: copy [command or text]"
        echo "  or pipe a command: [command] | copy"
        return
    fi

    local output
    local res=false
    local tmpfile="${TMPDIR}/copy.$RANDOM.txt"
    local msg=""

    if [[ $# == 0 ]]; then
        output=$(cat)
        msg="Input copied to clipboard"
        res=true
    else
        local cmd=""
        for arg in $@; do
            cmd+="\"$(echo -en $arg|sed -E 's/"/\\"/g')\" "
        done
        output=$(eval "$cmd" 2> /dev/null)
        if [[ $? == 0 ]]; then
            msg="Results of command are in the clipboard"
            res=true
        else
            if [[ -f $1 ]]; then
                output=""
                for arg in $@; do
                    if [[ -f $arg ]]; then
                        type=`file "$arg"|grep -c text`
                        if [ $type -gt 0 ]; then
                            output+=$(cat $arg)
                            msg+="Contents of $arg are in the clipboard.\n"
                            res=true
                        else
                            msg+="File \"$arg\" is not plain text.\n"
                        fi
                    fi
                done
            else
                output=$@
                msg="Text copied to clipboard"
                res=true
            fi
        fi
    fi

    $res && echo -ne "$output" | pbcopy -Prefer txt
    echo -e "$msg"
}

Należy go umieścić w pliku .bash_profile w następujący sposób:

W Terminalu wpisujemy komendę:

nano ~/.bash_profile

Jeśli nie posiadaliśmy wcześniej tego pliku, to zostanie utworzony. W edytorze wklejamy powyższy skrypt. Zapisujemy plik (Ctrl+o) i zamykamy edytor (Ctrl+w), a następnie przeładowujemy plik komendą:

source ~/.bash_profile

Od teraz możemy już używać polecenia copy na różne sposoby, które podał autor:

  • copy pwd — umieszcza w schowku systemowym katalog, w którym aktualnie się znajdujemy;
  • copy !! — kopiuje ostatnio użytą komendę;
  • copy curl http://adresURL — kopiuje kod źródłowy podanej strony;
  • copy ~/jakiśplik ~/drugiplik — łączy i kopiuje zawartość wskazanych plików;
  • copy *.{rozszerzenie,drugierozszerzenie} — kopiuje zawartość wszystkich plików o wskazanych rozszerzeniach w danym katalogu;
  • copy tutaj znajduje się jakiś tekst — kopiuje wpisany tekst;
  • date | copy — kopiuje aktualną datę (działanie identyczne jak przy użyciu | pbcopy).

Źródło: brettterpstra.com



0

Maciej Skrzypczak

Użytkownik sprzętu z nadgryzionym jabłkiem, grafik komputerowy, nałogowy gracz ARK: Survival Evolved. Redaktor iMagazine.pl.