Como 'cat' filename retornado por 'which'?

2

Respondi a esta pergunta mas perceba que poderia ser melhor.

Como posso converter:

$ which gjslint
$ cat /usr/local/bin/gjslint

Em algo parecido com isto:

$ cat < which gjslint
-bash: which: No such file or directory

.. para que o caminho de saída + o nome do arquivo de which seja passado para cat , que faz isso (ou seja, imprime o conteúdo do nome do arquivo na tela).

    
por Zabba 10.06.2011 / 22:56

2 respostas

7

Use backticks:

cat 'which gjslint'

Se o caminho contiver espaço em branco (improvável com caminhos padrão), será necessário colocá-lo entre parênteses:

cat "'which gjslint'"

Uma alternativa seria cat "$(which gjslint)" . A razão pela qual eu uso backticks em vez de $() é porque é mais fácil digitar, dois pressionamentos de tecla com uma mão vs 4 teclas com as duas mãos. Estou ciente das desvantagens de usar ' over $() , mas essas não se aplicam neste caso. Você não vai aninhar backticks ou usar barras para encontrar rapidamente um programa.

    
por Lekensteyn 10.06.2011 / 22:59
0

O que você tem na pergunta vinculada é:

$ cat $(which gjslint) | grep [0-9] --color=always

O que você pode fazer é:

$ grep '[0-9]' --color=always "$(which gjslint)"

Há alguns pontos a serem observados:

  • não há necessidade de cat file. grep recebe arquivos como argumentos
  • cite a sua regex; A razão para isso é porque o shell tentará expandir [0-9] como nomes de arquivos. Se houvesse arquivos 0,1,2,3 e assim por diante para 9, o shell expandiria seu comando para grep 0 1 2 3 ... e o resto de args. Tente fazer isso - touch 0 1 2 && stat [0-2] e você verá. Isso pode se tornar um problema se você precisar passar a saída de grep para outro lugar
por Sergiy Kolodyazhnyy 21.06.2017 / 04:53