[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: multi-line alias executed out of order
From: |
Pierre Gaston |
Subject: |
Re: multi-line alias executed out of order |
Date: |
Tue, 17 Dec 2013 17:14:04 +0200 |
On Tue, Dec 17, 2013 at 6:33 AM, Andrew Martin <andrewcmartin@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