Kopiowanie w Terminalu
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