piping pwd para um executável como um argumento

1

Por isso, tenho um apelido para "sublime text" link e muitas vezes eu preciso abrir um arquivo ou uma pasta direto do terminal, fácil para um arquivo:

subl myfile.html

e para uma pasta

subl /Users/me

Mas como posso usar o comando 'pwd' para abrir o diretório atual no sublime? Existe uma maneira de canalizá-lo?

    
por iLemming 17.09.2013 / 22:58

3 respostas

5
$(pwd)

ou, você pode usar backticks, como

'pwd'

Então:

subl 'pwd'

De qualquer forma, o que acontece é o comando pwd ser executado, então o texto de retorno é passado como linha de comando. Uma boa maneira de ver o que está acontecendo, supondo que você esteja usando o bash, é emitir set -x e executar o comando. Como este exemplo, onde subl é aliased para echo , o resultado de pwd é passado na linha de comando para o alias expandido (as linhas que começam com + indicam o < comando em> actual sendo executado):

$ alias subl=echo
$ mkdir /tmp/abc
$ cd /tmp/abc
$ set -x
$ subl 'pwd'
++ pwd
+ echo /tmp/abc
/tmp/abc
$

(Quando estiver pronto, você pode parar de imprimir comandos emitindo set +x .)

    
por 17.09.2013 / 23:25
3

Você pode usar a variável ambiental PWD ou o .

sub1 $PWD

sub1 .

    
por 17.09.2013 / 23:18
1

Para interpolar a saída de um comando na linha de comando de outro comando, use substituição de comando .

subl "$(pwd)/somefile.txt"

Observe que você precisa colocar (…) entre aspas duplas. Caso contrário, coisas ruins acontecerão às vezes (quando a saída do comando contiver espaço em branco ou \[*? ).

No caso especial de pwd , existe uma variável de shell que contém o mesmo texto: em vez de $(pwd) , você pode escrever $PWD . Pelas mesmas razões, isso precisa estar entre aspas duplas.

Se você quiser que subl chame o programa subl com um caminho absoluto como argumento, isso deve ser feito em uma função, isso não pode ser feito em um alias. Lembre-se de que o caminho já pode ser um caminho absoluto.

subl () {
  case "$1" in
    /*) :;; # already an absolute path, nothing to do
    *) set "$PWD/$1";; # make an absolute path
  esac
  command subl "$1"  # invoke the external program subl, even though a function exists
}
    
por 18.09.2013 / 03:43