From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24815 invoked by alias); 16 Mar 2018 17:25:12 -0000 Mailing-List: contact zsh-users-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Users List List-Post: List-Help: List-Unsubscribe: X-Seq: 23249 Received: (qmail 18825 invoked by uid 1010); 16 Mar 2018 17:25:12 -0000 X-Qmail-Scanner-Diagnostics: from mailrelay.anl.gov by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(130.202.101.22):SA:0(-4.2/5.0):. Processed in 8.348765 secs); 16 Mar 2018 17:25:12 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, T_DKIM_INVALID,T_RP_MATCHES_RCVD autolearn=ham autolearn_force=no version=3.4.1 X-Envelope-From: wozniak@mcs.anl.gov X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | X-IronPort-AV: E=Sophos;i="5.48,316,1517896800"; d="scan'208";a="183038342" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ArgonneDOE.onmicrosoft.com; s=selector1-mcs-anl-gov; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=HCoXoCoXVRacVL7R3sUrlQ9zG03v/HVMw0Swy1nDkos=; b=JfnPJPwddJRBbilvs3uflQc+4Y66CKI6cbwHrMwkLHnQOULZQCPytO5LLxLNhmBZwyljiTTjjYxjDMXPUK8WiVu4mlijBWeDVK29Ri5uPirttJDfvw26yKGF7cwlK1h3BtUbhslHA8YJLBa1A+rDAOJgvcedG22sNuAvL3I+2LE= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=wozniak@mcs.anl.gov; Subject: Re: real time alias? To: References: <98aa0638-97ed-dfe0-8dd2-39129d02c084@eastlink.ca> <9001d78e-91fd-8505-518f-27247462d3c2@eastlink.ca> <20180315214450.sle4bsb3ab6dt56i@prometheus.u-strasbg.fr> <20180315214618.5exweubdq3d5akzo@prometheus.u-strasbg.fr> From: Justin M Wozniak Message-ID: <0d176b63-3e79-ddd3-dcfa-03bed94db0e2@mcs.anl.gov> Date: Fri, 16 Mar 2018 12:19:03 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 In-Reply-To: <20180315214618.5exweubdq3d5akzo@prometheus.u-strasbg.fr> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-Originating-IP: [140.221.10.225] X-ClientProxiedBy: BN6PR13CA0003.namprd13.prod.outlook.com (2603:10b6:404:10a::13) To MWHPR0901MB2188.namprd09.prod.outlook.com (2603:10b6:301:81::28) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f6d8ad1c-0905-47fc-2907-08d58b62076d X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020095)(4652020)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020);SRVR:MWHPR0901MB2188; X-Microsoft-Exchange-Diagnostics: 1;MWHPR0901MB2188;3:EWQIzD0JhFKEaI6B703c2tStFRCGgnXBw3CdW0s+KWkuNx14Lt5JX3PGIHFVoHimiG/fiQhvw2Hn2lbxKqQKDX24OSap+0pnoFeeeA48iaaCNW+2/APYOdnj9mMU96hNub6ga3DjhzIiVYAwuct+CKYYkiOYQeNL/aPxjEpMWuPZWUvvqZSZCxH33xq8ObqSh4oXyN3SDJHzd8W8HO4QNU599RNFMIDr+TAnMy6yNcXSWXQKNXpubVXxO5NCip5L;25:QC8oFKCS16xbqqhuygfQL1ad9ayfr8L4mfYNWTFumraL7reEYDIjAj5Vsho8H3XDI15HJqzNjh7UKGWap/z48QHn3dbZt+ARpkiO5tvsj+VpbZspBgAWBywP2jHeAvsmdgV0tD1k314E8Zu/3U+iwszBiPJdeCmRiIbwKj1j+wRaVD4cb6tvaJ4OcUhqcTh5bONOi1gQJBlRjcGQksGHVGejux16fiyFnfZCMVuRhRYl7LTvaMNSANdHLz1h7Acb0cj0IWR38XN6QQtfO/7duNkHzsezNpqL5qqecRxMV+zldIYx27CRafgpv2y4SrunlMXMQVW0N9+BPtvBy5aDGQ==;31:Yb3EHo0kkzAGR+ghaaH53pR0Fn8pjR16/O+5OVAL0M9ldR+wChTVuXQZhJWv4uRPkddj2mDNQ1V6o4N+l5qkXcOjpgrVjrQnM+ZTNa2+8UhV3+4KXSYu+iSgT+PnG2oDgaEa0Z7Z80RK+bmucmuliCjt8QUcnQ15PKWXW9KSUe30Lc0COERCUBLLEeSsTZycZLJugA6MteLWLowdsHXrPOkJWJMFGYNR0/FswTLyPPU= X-MS-TrafficTypeDiagnostic: MWHPR0901MB2188: X-Microsoft-Exchange-Diagnostics: 1;MWHPR0901MB2188;20:jd6CgOXt4tqc6h3GW2BKTnJvv+W//+8tozS/DaavHCv4/CH8W9q5ZFz4F3bEYqz795zlbBfT0p1KGxQYx3gkx0rQ5zlUmKZJ4CNd7U2AM9f0WBDK1iTes3Hh74zg6MH3XzMTdNZ6d4puXqjtSm8DargSI8kubuTR8CdhM2t/EEajN+0NyWCplCX8frn3GA98t7D4TQPTk2ZUQhpBGk2Ezi2+6lxfB0XqV1yo5lRR+aUORWYUxFY+6uHu1Q7T98wBWi0jbpLkLn4vOQ5IE25jtFw6L1aVs+2p//Q92tvkqXkUDR9OWx9NXkQ0EJzhPtvbYD+W0E8ihSbIBfutKz9/lorh1VfUbXAmUXU3irwy3UjEyc78bLd8scxrK3BmvPoS5dqpAArnsHHwiFMkCLpL/gv39XSVb6FT80xAFP+kh4GhuaINF2q/qjQOMA4uFsdNL1zQfg7UbmzIeGrGRFMEid6RbMmQTwYoCzzUw9XFo57QHXm4lqmu2ooo4C23eWTg;4:Bz4gyTeG29Gn/hDEi0j1rJQy7MP4bHfBM0HgCRQs/yZA279l41KtGLV8XO+4uQ8UrAfMFpjdOoBxnns2p95iwL/3Gvx5GwvZWrgJDecLlSy0fBx7zLjh45fTQf2q2Aafu2Iws4lbWcboUDMjnScenjESaNcTAjRiQ/iUaYyuw3X44EpElqKhLhScXjbZVzUphEieAQP8UYOW9WYmwU6k7TNiLgN+/3Dkqy7uTnbsLeJDMeWnsqTPPBma42pvQ6i9aPqpT4ZCB7SdFHM7jNrBHW+spqeA02d0/AC78AEuNwXQD0/ZEZDn3eoDtXgyQjzE X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(166708455590820); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040522)(2401047)(5005006)(8121501046)(10201501046)(3002001)(3231221)(944501244)(52105095)(93006095)(93001095)(6041310)(20161123562045)(20161123564045)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011);SRVR:MWHPR0901MB2188;BCL:0;PCL:0;RULEID:;SRVR:MWHPR0901MB2188; X-Forefront-PRVS: 0613912E23 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6049001)(39380400002)(346002)(376002)(366004)(39860400002)(396003)(199004)(189003)(7736002)(93886005)(53936002)(7116003)(305945005)(3480700004)(67846002)(65806001)(65956001)(81166006)(8936002)(31686004)(47776003)(66066001)(8676002)(105586002)(81156014)(6666003)(229853002)(6486002)(6306002)(2950100002)(6116002)(50466002)(16576012)(6916009)(49976009)(5660300001)(316002)(6246003)(25786009)(64126003)(2906002)(68736007)(58126008)(74826001)(65826007)(59450400001)(16526019)(86362001)(26005)(31696002)(76176011)(478600001)(52116002)(2486003)(2870700001)(52146003)(23676004)(2361001)(2351001)(3846002)(186003)(386003)(53546011)(106356001)(97736004)(3940600001);DIR:OUT;SFP:1101;SCL:1;SRVR:MWHPR0901MB2188;H:[140.221.10.225];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; Received-SPF: None (protection.outlook.com: mcs.anl.gov does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtNV0hQUjA5MDFNQjIxODg7MjM6ejdSZC9TTE5Ja1JkYzU1UU1aVTdIWmZY?= =?utf-8?B?bDhmVDF4dWpGV0E2b1JCWHZhRDMwRm5sbHpTcjluRWRDVlFTeXhmUk1aUlY0?= =?utf-8?B?NFZTeWNHdnVkUGI5cWhQcHJYcnpSaHVGZmRqc2Rka09vazhrako0MjVFVndi?= =?utf-8?B?RkZGcWRDN2R0QmlnM0JPTG9aQUc0ZzloNkdMczMzQXlobVZlQVFROWVtNFox?= =?utf-8?B?STJRY3JOaVIvSnBNUXJjTkIvMFRmQUtSaW1EQkQwQ2RJWDVMNzFBbWFFaC9i?= =?utf-8?B?UnVyOXZyR0NCUEUveWVXSzBjUGdBT1N4MGlRTFVrdkRIZlArMlBoSGRDMWtZ?= =?utf-8?B?ODdhazZqbU16RTJHY0RQckJUeEwydzZHcXFMWllKZFJXc3RDUkF6TVYwODh0?= =?utf-8?B?MDRVVjVBckhDN3R0UHp3Y3JEd2VNNHdSY005QzhDbEJ5cWUzZzQzcExHeTF0?= =?utf-8?B?K3Y1ZUVsb2cxT2JrbDlEaWtqVmpDY1FGSDNGMFh0VWgwSkR3UmI1OStIeCtx?= =?utf-8?B?VUc1RUZleVBVcWlFSnI2TkppT3lMSHpraXJIWGpqMURVY2JnRHJFVzFWb0VO?= =?utf-8?B?ekJSTElXbzNlMGtManFwY1pkdk0yVTdsdjJHVVZvdlRrZXZRSU9BUzUzSFpW?= =?utf-8?B?U1k2NnBXU0V6bUVaMkgxRkRZZStzbzJSSG9mT3FOWWwxRlNBWGNBSnQwb2pW?= =?utf-8?B?K2R3ZnNzSTFja1EzOWRtbFl4cENtLytvSUNncWllUDQ3YmlGRmpRUXlNTm9B?= =?utf-8?B?ekRtQVcvbnhOREZKRWJ3ckorRTFkSUdsUGJkdFBjVTFVQ1RxQjZTU3FENXYr?= =?utf-8?B?VFpoaVpmdjJaVnhpdnR0K2thZVpiYVY1RStkbUgwZzlqeGJqRFRuVWFpUmRK?= =?utf-8?B?Vmg4UFdsV2dmYk05NEljK0FTQjVnWFZBQWFVRU84eHVER1MvWUFCWnFsU3BX?= =?utf-8?B?T2ZnN2NhUVM0RDluV3FCWkI0QjNnZUhUKzErcHFCbXlTNENucUM2NVhCRkRo?= =?utf-8?B?ZFhmVnlzZExLQ2thQTFCcW9OZjFtWHhuTVlNSmtMakhCYW91bjNoZHpLck5w?= =?utf-8?B?WDlIVDdLR2V3WHVPVmpTNVNjc3VISDZSZi9JdjRNWUVqVUliVlFSS29ZQW9G?= =?utf-8?B?anZrYzVKYVV1Mlp6dGZyMG10QWhBWUNkVHpPd2IvcWxwRm5peEhoTFJzbUNL?= =?utf-8?B?cTIzZW1nLzROdUUyYm1CdUhrSDNsSkcvSXgvcUlZTFpPWEpCL0haTDluRVBi?= =?utf-8?B?a1dEZ3prNmlWMk9DSndBakI1ZjVMR09LMVErK2hvdVhCZlpaZmlNdFFzNUov?= =?utf-8?B?RTVOZEZqamFmSm1ocEo2d3pUNFBMOW11aWNua3hodVBRc2RjOUYvR2VlRHdI?= =?utf-8?B?NHlpM3poeE4xMk1MSFZuNXhkUWhlRGU0VkMxOXlucHhWaEkxOExxZFZhdVhq?= =?utf-8?B?TEhPUjUxaEVZTis0WCswQjdIaTNyK2Q0MmI0YVdsR01tMS9DMWtobXJ3bWNt?= =?utf-8?B?RXVlTWlMSnRsMG5ZY1FFdlV0RGlkOXk0SERSSGhMakROeVNkWDZ1NHQ1R1Yw?= =?utf-8?B?NERjaUNoNGhDa2FLYWhmZ3Y2NVhMQkpOSlJwWjJjTzRmVHJoU1ZVTktlWUUz?= =?utf-8?B?U2NRMGdnQmhOSHYrU09jeE44QzBIdW5Tczg5TkdydWpnRGFsT2dIYTlNY1Rj?= =?utf-8?B?T203T25rNUk4Y20wOEVTd01Fd3k0Y3BZbkc1VHB0d0RNdVVONTFBckZCREZU?= =?utf-8?B?dmZZeWRSTExhQjFFN2lzZEt2aGJLQUhyWnhkVGhpQkRqMGg2bmVPSkYyR1l6?= =?utf-8?B?RUxFT2gxcUFTbzFTSUt0bU4zTE83cDVOeCtxUVpzWjNoTGt2emVCT3pFTklV?= =?utf-8?B?d0lYSlBhby9YUlFFNTJ6OWhpYW1kOGF6dDlUQU1DUlBDV2k4NlNTdkdIVmFi?= =?utf-8?B?aTZBS1ZPNk9UckdtVnN0Vk9QQlFxY2hXR3FXaHVMLzNrYktMS2lVY1FiampV?= =?utf-8?B?ejVneHYzQVMyQ3QyZ0JtMHlQRm52aGFLR2t1ZFpYTGVDM09VbndRZEdaMVpF?= =?utf-8?Q?iMlk2I=3D?= X-Microsoft-Antispam-Message-Info: X2HLexzeKMb3h67esfUrj6kN9B39GzS/2iBmEzcYiZNMcV2kJb0/B0/Vjjyu4hjoIzfEvxSflWUJi0XGmix3OsqvwmcfQbDZgHjPC7pnrh8BfO1PQz3lROxvGZMIX+U7uTNr20hl+m8DyURWsKWo9cD+i5hBJpKuWr1My8y1C8SiBhENFGSSTmMho+xh7siU X-Microsoft-Exchange-Diagnostics: 1;MWHPR0901MB2188;6:uFWgbk2MS19wlM02a8PjJNxh1XFIAcoBy6zDtCFJ7JuMrPGhbJRReGQyeEPRJeelM4skY2zJI4QhN0Sw6bcgmd1mTAVayGiTy3T80nNBaKmVZF8JG3/9IqKRfYEAL5OA3qcuipRKQpoqURXA3ByzPpAUQTjvZPJF77lkCnu0T0UmoWld+ADGGPzWxYvBHT4QxmrpgH+a7sVWwL6e7+/H+VWJuWtTu+8xuEvH5HkFQD5v0w5jp6nN65KwBkcaojNiTj8kV/n9B29oW2JwBR72VnIC2/vdimq/2CCZP1yN2QJ5bqCijFEZT23ZWK0UXGEEzRV99J9rh8QI2SkuePRvQeYmnyk8HTKM92B1Kb7sOqU=;5:3RrYvmdpPdgZDr0gVagVlVhcqbAVei8TaMSeY/gxRsa0N/lzqjB1ELztJc/gFTYPqRPgl1WopYDuUTg1twp1bDhi6qUSLzKefpxKjNFRe53LbC8gNJpkbMkxdZGzLvJMOFsj1DKfIzi0Ab6TGN/4tS9NSkcdy10u86KogXuJqwM=;24:Haqh01ySnotVRjful6AgGxeDiWbmvNAYKCXStfVFdp6uhnOH/XQ7bnzy4+3NaZHJgOqmKtgfB/PiVYhC97AkTWpeTp+y8G1ez6mLd82/u24=;7:RnB7/XxJEbZ/xWN9n92mfj+lLVyNNqWlOkK1JqQ1+lp06tpvB+wi2JMCiOmCFs5BhCe7uW3INJJO2zssrmRMMvbIq6wEgkWdOEwDWPkkJESeRBgsRfhZTncQd/J8y3zbF/qLJ+fPcQOuj7nFVp020vP1vnfIb1oUkxuMWWTFhcqecTe61BhEkWKTjSo21j2nA5nYjKEky4Ay/dA4f5IwxrhnXkZPvWTqkh96nHirsGBG05M5zAcnlrJSXgoaHXG2 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;MWHPR0901MB2188;20:S970MuQPMSdtc7b0WYVDDPZaWiLEHHdDtaczuOTz+ciMHKSN1kEU+hvTQNIA+8MBGWm3/s+gJZK7AQwZw2K0O8367RLZ0oPEGZEzigT5mmEVNLXJQlHpwoQHB37z3K4M2wZmzZIR2gdurhJyIfHQy06+Ho0YISkHzmvtbdXmJGpEllk++nJ6SL0+VmW6kymqhoATmi7QxjLFvyBHYsQiZErgBMTOLHIivmhpOF7kYwlvZQJSdPwa3qnxbjt39NLQ X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Mar 2018 17:19:08.7631 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f6d8ad1c-0905-47fc-2907-08d58b62076d X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0cfca185-25f7-49e3-8ae7-704d5326e285 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR0901MB2188 X-OriginatorOrg: mcs.anl.gov Is there a way to have aliases work as macros?  For example, can some modification of warn_ () be used to return from the calling function? On 03/15/2018 04:46 PM, Marc Chantreux wrote: > On Thu, Mar 15, 2018 at 10:44:50PM +0100, Marc Chantreux wrote: >> hello, >> >>>>> If a function calls an alias, if the alias changes, the function must be >>>>> resourced, yes? That makes nothing but sense sincethe alias is what it is >>>>> at sourcing. An executed script uses the alias in 'real time'. But, is >>>>> there a way to make a function also use the real time value of an alias? >>> Sure, I was just wondering if it was possible at all with an alias. >> my advice is: see aliases as macro: don't use it as long as you can >> achieve things with functions. one of the reasons is aliases can be used >> after a variable expansion and so you can get some surprising behaviors. >> >> rip () { >> print $1 wrote >> "$@" >> print then $1 died >> } >> alias stephen='print a brief history of time' >> rip stephen hawkings >> >> then your universe colapse >> >> stephen wrote >> rip:2: command not found: stephen >> then stephen died >> >> but >> >> rip () { >> print $1 wrote >> "$@" >> print then $1 died >> } >> stephen () print a brief history of time >> rip stephen hawkings >> >> gives you a good reading advice >> >> stephen wrote >> a brief history of time >> then stephen died >> >> so when are aliases useful? well ... basically when you need something >> like a preprocessor. for example if you have a set of functions where >> the first arguments are always the same, you can write an alias for it: >> >> alias user_='local ns=${1?namespace of the user expected} \ >> id=${2?the id of the user expected}' >> >> showid () { user_; print user id is $id } >> showns () { user_; print user ns is $ns } >> showid >> >> warns you >> >> showid: 1: namespace of the user expected >> >> another example from uze.zsh (https://github.com/zsh-uze) >> >> warn_ () { local r=$?; print -u2 "$*"; return $r } >> die_ () { local r=$?; print -u2 "$*"; exit $r } >> alias warn='warn_ at $0 line $LINENO, warning:' >> alias ...='{warn unimplemented; return 255}' >> alias die='die_ died at $0 line $LINENO:' >> >> now i can write >> >> allowed () false >> >> do_stuff () { >> if {allowed} { >> print i do stuff >> } else { >> # what to do then ? >> ... >> } >> } >> >> do_stuff >> >> so i have this message: >> >> at do_stuff line 5, warning: unimplemented >> >> hth, >> marc >> >>> you ask, there might be some option or something whereby a function is >>> instructed to grab an alias at runtime sorta the way the value of a variable >>> is grabbed at runtime. >> you can use both functions and arrays >> >> show () { >> print "hello, i'm a particle and i'm" >> position >> } >> position () print here and there >> show >> position () print elsewhere >> show >> >> gives >> >> hello, i'm a particle and i'm >> here and there >> hello, i'm a particle and i'm >> elsewhere >> >> also >> >> show () print -l "hello, i'm a particle and i'm" $position >> position=( here and there ) >> show >> position=( elsewhere ) >> show >> >> gives >> >> hello, i'm a particle and i'm >> here >> and >> there >> hello, i'm a particle and i'm >> elsewhere >> >> don't forget that in crontrary of other shells, zsh takes arrays and >> word spliting seriously so you can store a whole command into an array. >> this is lovely when you build one step by step >> >> academic () true >> faster () true >> dryrun () true >> >> dryrun && compiles=( print cc ) >> || compiles=( cc ) >> >> academic && compiles+=( -Wall -std=c99 ) >> faster && compiles+=( -O2 ) >> compiles+=( $src $dest ) >> $compiles >> >> hth >> marc -- Justin M Wozniak