Skip navigation

Category Archives: Tips n’ tricks

Takie tam małe ziemniaczki…

Ostatnio natknąłem się na problem z uruchamianiem przez SSH skryptów, które startują procesy w tle. Skrypt uruchamiany lokalnie działał poprawnie a zdalnie przez ssh ‘wisiał’. Okazuje się że problem mozna zasymulować w prosty sposób. Wystarczy napisać prosty skrypt uruchamiający zadanie w tle:

#!/bin/bash
nohup sleep 300 &

Po uruchomieniu tego skryptu przez SSH, klient ssh czeka na zakończenie polecenia sleep.

Udało mi się znaleźć dwa rozwiązania:
– uruchomienie ssh z parametrem -tt (wynika z tego że nohup nie działa poprawnie jeśli skrypt nie jest podpięty do terminala)
– przekierowanie deskryptorów wejścia/wyjścia (również dla błędów).

W naszym niesamowicie skomplikowanym skrypcie można to zrobić np. tak:

#!/bin/bash
exec >/dev/null /tmp/error.log
nohup sleep 300 &

Od kilku miesięcy pracuję w korporacji, gdzie niestety – jak to w korporacji – standardowym systemem desktopowym jest tzw. produkt pewnej dużej firmy z Redmond. Aby utrzymać swoją produktywność na rozsądnym poziomie zaopatrzyłem się w maszynę wirtualną z linuksem. Problem w tym, że do celów prezentacji obrabianych przeze mnie danych i tak wykorzystuję Excel’a.

Szukając jakiegoś szybkiego sposobu na kopiowanie danych z konsoli do arkusza znalazłem bardzo prosty program o nazwie xclip, który kopiuje do schowka to co dostaje na standardowe wejście. Dodając do tego współdzielony schowek między maszyną wirtualną maszyną a Windowsem – mamy szybki i efektywny sposób na kopiowanie danych. Przerzucałem w ten sposób po kilka tysięcy wierszy bez zauważalnego opóźnienia. Aby dane wklejane do arkusza były automatycznie rozbijane na kolumny powinny wykorzystywać znak tabulacji jako separator.

Przykładowe wywołanie wraz z podmianą przecinka na znak tabulacji:

 Bash$ ./skrypt.sh | sed 's/,/\t/g' | xclip -selection clipboard

A potem już tylko <Ctrl-V>…