Você está assumindo que a saída de who | grep jeevansai
será uma única linha, o que está errado.
++ who
++ grep jeevansai
++ cut -c 32-34
+ ld='31
31 '
Isso está lhe dizendo que o comando
ld='who | grep "jeevansai" | cut -c 32-34'
defina a variável ld
para " 31 31
", em vez de um único número, como você esperava. Mais tarde, você tenta fazer matemática ...
if [ $ld -gt $cd ]
... expande para ...
if [ 31 31 -gt 31 ]
e isso é muitos argumentos para [
.
O que você precisa fazer é tomar o mínimo de todas as datas que retornam de who
. Infelizmente, a aritmética de datas não é fácil no shell (observe que seu programa atualmente ignora o campo de mês). Eu pessoalmente procuraria por Perl ou Python.
EDIT: Para qualquer um que esteja se perguntando por que who
imprime mais de uma linha de saída para um único usuário: em uma moderna estação de trabalho Unix (inclusive OSX) todas as janelas do shell que você abrir geralmente terão sua própria entrada, porque cada janela do shell aloca um pseudoterminal , e o banco de dados utmp
que who
usa, conta cada terminal ativo (pseudo ou caso contrário) como seu próprio login. Da mesma forma, screen
e tmux
alocarão um pseudo-terminal para cada painel. Você também pode ter uma entrada de utmp para toda a sessão gráfica. Tudo isso foi projetado na década de 1970 e não mudou muito desde então. Por exemplo, aqui está o que parece no meu Mac quando tenho duas janelas de shell abertas:
$ who
zwol console Aug 18 09:59
zwol ttys000 Aug 19 09:49
zwol ttys001 Aug 19 10:35