cshell alias: Como usar aspas simples aninhadas (') no alias de cshell

1

Estou tentando abaixo de alias em cshell:

alias sll 'ls -l \!* | grep -oE '[^ ]+$' | paste -s | xargs ls -l'

Para este CSH diz: Nome da variável ilegal.

Se eu usar \$ , o alias será definido sem nenhum erro. Mas quando eu uso esse alias, recebo, grep: Invalid regular expression

PS:

  1. O objetivo deste alias é alcançar ls -Ll <filenames> , mas com caminho completo do arquivo que o link simbólico referencia.
  2. A parte do alias do RHS funciona bem como um comando autônomo.
  3. Em vez de egrep (grep -E), tentei awk '{print $NF}' . Mesmo para isso, CSH dá o erro: variável indefinida NF.
por BluVio 18.01.2016 / 15:17

1 resposta

3

Verifique suas aspas simples. Aspas simples não se encaixam magicamente.

alias sll 'ls -l \!* | grep -oE '\''[^ ]+$'\'' | xargs ls -ld --'

Isso ainda é falho por vários motivos:

  • Por causa de [^ ] , isso não funcionará para nomes de arquivo ou link que contenham espaços.
  • como você está tratando essa lista como uma lista de linhas, que não funcionará com nomes de destino de arquivo / link que contenham caracteres de nova linha.
  • por causa de xargs , que não funcionará com nomes de arquivo / destino contendo apóstrofos, barras invertidas, aspas duplas e outros tipos de espaços em branco.
  • Para links simbólicos com caminhos relativos como seus destinos, isso só funciona para links simbólicos no diretório atual, pois o que você passa para o segundo ls é um caminho relativo para o diretório atual, enquanto links simbólicos são resolvido em relação ao caminho do arquivo de link simbólico (se você tiver um link a/b/c -> d , isso é para a/b/d , não d no diretório atual).
  • você receberá uma mensagem de erro falsa devido à primeira linha total <n> da saída de ls .
  • para links simbólicos para links simbólicos, que não lhe darão o mesmo que ls -lL (pode ser o que você quiser).

Com zsh , você pode:

ls -ld -- *(:A)

O modificador :A expande os links simbólicos para o caminho absoluto canônico deles.

Um quase equivalente em sistemas GNU:

readlink -fz -- * | xargs -r0 ls -ld --
    
por 18.01.2016 / 15:49