$_
pode fazer o truque:
koke@escher:~$ mkdir test && cd $_ && echo $_
test
koke@escher:~/test$
É possível executar comandos consecutivos, com aqueles que seguem referenciando o (s) parâmetro (s) passado (s) ao primeiro?
Por exemplo, download, untar e cd:
wget superuser.tar.gz
tar -xzf superuser.tar.gz
cd ./superuser
Em vez disso:
wget superuser.tar.gz && tar -xzf $1 && cd $1
// with $1 being superuser.tar.gz
A única maneira de pensar nisso é referenciá-lo como uma variável. Existe outra solução?
Então, para expandir a resposta de Jorge Bernal , você também pode usar a expansão de parâmetros:
wget superuser.tar.gz && tar -xzf $_ && cd ${_%.tar.gz}
que removerá o ".tar.gz"
Não é o que você pediu, mas talvez esteja perto o suficiente para você. No bash, Meta + _ (Meta + sublinhado) lhe dará o último parâmetro do comando anterior. Então, você pode fazer:
$ wget superuser.tar.gz
$ tar -xzf <Meta>-_
# In the above, I typed Meta-_, got superuser.tar.gz
$ cd ./ <Meta>-_<Meta>-2<Meta>-<backspace><backspace>
# In the above, I type Meta-_ to get superuser.tar.gz, then
# Meta-2 followed by Meta-backspace to delete
# two words, then backspace to delete the period.
Isso é mais fácil do que explicado, infelizmente.
Eu tenho minha chave Alt mapeada para Meta (padrão na maioria dos terminais no linux), então é muito fácil digitar.
Finalmente, Meta + _ usa um argumento numérico, então você pode digitar Meta + 2 Meta + _ para obter o segundo parâmetro do comando anterior na posição atual do cursor.
A última parte é complicada porque a pasta dentro do arquivo provavelmente não tem o mesmo nome que o arquivo (superuser.tar.gz), então a menos que a pasta dentro também seja nomeada superuser.tar.gz, você precisará use basename ou similar para remover a extensão .tar.gz. Se você souber o nome do diretório, pode fornecê-lo na linha de comando.
O resto é fácil. Envie a saída do Wget para stdout e, em seguida, canalize-a para tar:
wget -O - superuser.tar.gz 2> /dev/null | tar xzvf -
Se você souber o nome do diretório dentro do arquivo:
wget -O - superuser.tar.gz 2> /dev/null | tar xzvf - && cd superuser
Isso não é universal entre os comandos, obviamente, mas a maior parte do que você deseja alcançar por meio da "referência" pode ser feita por meio da tubulação.