On Tue, Dec 17, 2013 at 6:33 AM, Andrew Martin <andrewcmar...@msn.com>wrote:
> Configuration Information [Automatically generated, do not > change]:Machine: x86_64OS: linux-gnuCompiler: gccCompilation CFLAGS: > -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64' -DCONF_OSTYPE='linux-gnu' > -DCONF_MACHTYPE='x86_64-pc-linux-gnu' -DCONF_VENDOR='pc' > -DLOCALEDIR='/usr/share/locale' -DPACKAGE='bash' -DSHELL -DHAVE_CONFIG_H > -I. -I../bash -I../bash/include -I../bash/lib -D_FORTIFY_SOURCE=2 -g -O2 > -fstack-protector --param=ssp-buffer-size=4 -Wformat > -Werror=format-security -Walluname output: Linux ubuntu 3.11.0-12-generic > #19-Ubuntu SMP Wed Oct 9 16:20:46 UTC 2013 x86_64 x86_64 x86_64 > GNU/LinuxMachine Type: x86_64-pc-linux-gnu > Bash Version: 4.2Patch Level: 45Release Status: release > Description:In a multi-line alias, where entries are separated by > semi-colon, "source" commands are not executed in-step with all the other > commands. After all the non "source" commands are executed, the "source" > commands are executed in reverse order. See below for an example. > Repeat-By: > ubuntu@ubuntu:~$ cat script.sh#!/bin/bash(echo -n "$1 "; date > +%S.%N)ubuntu@ubuntu:~$ alias foo1alias foo1='~/script.sh one; source > ~/script.sh two; source ~/script.sh three; ~/script.sh four'ubuntu@ubuntu:~$ > alias foo2alias foo2='~/script.sh one;source ~/script.sh two;source > ~/script.sh three;~/script.sh four;'ubuntu@ubuntu:~$ foo1one > 09.742581873two 09.745315889three 09.749212492four > 09.761410711ubuntu@ubuntu:~$ > foo2one 11.805819275four 11.819741270three 11.828260887two 11.829470548 > Fix: > Use a single-line alias. Or use the "&&" operator to chain commands > (which changes the functionality to be short-circuit evaluations). > Also verified this behavior on RHEL6 with bash 4.1.2(1). > Thanks!Andrew Martin > The missing newlines are like the below? ubuntu@ubuntu:~$ cat script.sh #!/bin/bash (echo -n "$1 "; date +%S.%N) ubuntu@ubuntu:~$ alias foo1 alias foo1='~/script.sh one; source ~/script.sh two; source ~/script.sh three; ~/script.sh four' ubuntu@ubuntu:~$ alias foo2 alias foo2='~/script.sh one;source ~/script.sh two;source ~/script.sh three;~/script.sh four;' ubuntu@ubuntu:~$ foo1 one 09.742581873 two 09.745315889 three 09.749212492 four 09.761410711 ubuntu@ubuntu:~$ foo2 one 11.805819275 four 11.819741270 three 11.828260887 two 11.829470548 I'm not sure what you mean by multiline aliases? maybe you wanted to have %s to have a correct timestamp?, %S are just the seconds. I cannot reproduce this on RHEL6 with bash 4.1.2(1) $ cat ~/script.sh #!/bin/bash (echo -n "$1 "; date +%S.%N) $ alias foo1 alias foo1='~/script.sh one; source ~/script.sh two; source ~/script.sh three; ~/script.sh four' $ alias foo2 alias foo2='~/script.sh one;source ~/script.sh two;source ~/script.sh three;~/script.sh four;' $ foo1 one 29.783807362 two 29.791015625 three 29.798001027 four 29.807617514 $ foo2 one 30.943728979 two 30.950628638 three 30.956146303 four 30.964935789