Cryptic Bash Crash

0

Eu tentei executar o seguinte script:

#!/bin/bash                                                                     
x=1
while [ $x -le 10 ]
do
    echo "Welcome $x times"
    x = $(( $x + 1))
done

E quando eu o executo, recebo um fluxo de mensagens que parecem se repetir até que eu o Ctrl-Z.

im4t:test math4tots$ ./mdtest.sh
Welcome 1 times
launch_msg("CheckIn") IPC failure: Operation not permitted
Xquartz: Unable to locate waiting server: org.x.X11
Xquartz: X11.app = /Applications/Utilities/X11.app/Contents/MacOS/X11
Xquartz: Starting X server: /Applications/Utilities/X11.app/Contents/MacOS/X11 --listenonly
X11.app: main(): argc=2
    argv[0] = /Applications/Utilities/X11.app/Contents/MacOS/X11.bin
    argv[1] = --listenonly
Waiting for startup parameters via Mach IPC.
X11.app: No launchd socket handed off, unsetting DISPLAY
X11.app: do_start_x11_server(): argc=3
    argv[0] = x
    argv[1] = =
    argv[2] = 2
Unrecognized option: =
use: X [:<display>] [option]
-a #                   default pointer acceleration (factor)
-ac                    disable access control restrictions
-audit int             set audit trail level
-auth file             select authorization file
-br                    create root window with black background
+bs                    enable any backing store support
-bs                    disable any backing store support
-c                     turns off key-click
c #                    key-click volume (0-100)

... Mensagem de erro longa que excede 30000 caracteres ...

ttyxx                  server started from init on /dev/ttyxx
v                      video blanking for screen-saver
-v                     screen-saver without video blanking
-wm                    WhenMapped default backing-store
-wr                    create root window with white background
-maxbigreqsize         set maximal bigrequest size 
+xinerama              Enable XINERAMA extension
-xinerama              Disable XINERAMA extension
-dumbSched             Disable smart scheduling, enable old behavior
-schedInterval int     Set scheduler interval in msec
-sigstop               Enable SIGSTOP based startup
+extension name        Enable extension
-extension name        Disable extension
-query host-name       contact named host for XDMCP
-broadcast             broadcast for XDMCP
-multicast [addr [hops]] IPv6 multicast for XDMCP
-indirect host-name    contact named host for indirect XDMCP
-port port-num         UDP port number to send messages to
-from local-address    specify the local address to connect from
-once                  Terminate server after one session
-class display-class   specify display class to send in manage
-cookie xdm-auth-bits  specify the magic cookie for XDMCP
-displayID display-id  manufacturer display ID for request
[+-]accessx [ timeout [ timeout_mask [ feedback [ options_mask] ] ] ]
                       enable/disable accessx key sequences
-ardelay               set XKB autorepeat delay
-arinterval            set XKB autorepeat interval


Device Dependent Usage:

-depth <8,15,24> : use this bit depth.
-fakebuttons : fake a three button mouse with Command and Option keys.
-nofakebuttons : don't fake a three button mouse.
-fakemouse2 <modifiers> : fake middle mouse button with modifier keys.
-fakemouse3 <modifiers> : fake right mouse button with modifier keys.
  ex: -fakemouse2 "option,shift" = option-shift-click is middle button.
-version : show the server version.


Fatal server error:
Unrecognized option: (null)

   OsVendorFatalError
   AbortDDX
^Z
[1]+  Stopped                 ./mdtest.sh

Eu também recebo uma janela que pisca (fecha e abre repetidamente):

Além disso, caso seja relevante, estou usando o Mac OS X Lion, mas não parece que deva ser importante ...

Parecia um script bash inofensivo ...

    
por math4tots 09.03.2012 / 07:48

1 resposta

11

Você tem um espaço extra nesta linha:

x = $(( $x + 1))

O shell está tentando executar o programa x , que parece ser um servidor X (o sistema de arquivos padrão do Mac OS não faz distinção entre maiúsculas e minúsculas, portanto, na verdade, estou executando X ). Você precisa fazer isso:

x=$(( $x + 1))
    
por 09.03.2012 / 07:53

Tags