Diferenças de comportamento globais entre script e linha de comando

1

Observe o comportamento distinto do seguinte entre o shell e uma função definida no shell:

Primeiro: tente diretamente no shell:

0:23:34/shared $ls -dlrta ?pectral*
-rw-r-----@  1 steve  staff  4430060 Oct 27 10:38 SpectralClustering.pdf
-rw-r-----@  1 steve  staff   840539 Oct 27 14:54 spectralEigenValues.pdf
-rw-r-----@  1 steve  staff   839485 Oct 27 14:56 Spectral EigenMatrices.pdf
-rw-r-----@  1 steve  staff  1928395 Oct 29 23:10 spectralClusteringlecture.pdf
drwxr-xr-x  45 steve  staff     1530 Nov  6 10:37 spectral.new
-rw-r--r--   1 steve  staff     5452 Nov 13 01:26 SpectralClusteringSuite.scala
-rw-r--r--   1 steve  staff     7935 Nov 13 01:26 SpectralClustering.scala
drwxr-xr-x  40 steve  staff     1360 Dec 21 08:32 spectral.old
drwxr-xr-x  45 steve  staff     1530 Dec 23 09:06 spectral

Agora vamos definir uma função contendo esse comando:

$type ldr
ldr is a function
ldr ()
{
    ls -dlrta 
}

Vamos tentar essa função:

0:23:06/shared $ldr ?pectral*
ls: EigenMatrices.pdf: No such file or directory
drwxr-xr-x  45 steve  staff  1530 Dec 23 09:06 Spectral

Alguma dica sobre como reconciliar / forçar comportamento idêntico na função quanto ao beavior (desejado) de diretamente na linha de comando?

    
por javadba 23.12.2014 / 19:25

1 resposta

2

Sua função precisa ser

ldr () { ls -dlrta "$@"; }

use o formulário citado "$@" para usar todos os argumentos, com espaço em branco protegido.

    
por glenn jackman 23.12.2014 / 19:47