Você poderia criar uma função em .bashrc assim:
searchString ()
{
if [ "$1" ] ; then
find /directory -type f -print0 | xargs -0 grep -i "$1"
else
echo "usage ..."
fi
}
Para personalizar minha experiência de usuário bash, existe uma maneira de usar o .bashrc para recuperar conjuntos de comandos comuns . Por exemplo, encontrei este conjunto de comandos para encontrar uma string de pesquisa em arquivos de texto,
find /directory -type f -print0 | xargs -0 grep -i 'search string'
Gostaria de poder relembrar isso com um apelido personalizado como 'grepfindfile e, em seguida, visualizar o conjunto de comandos acima exibido no bash da mesma forma que o último comando é retirado do histórico.
Ou eu teria que criar algum tipo de script bash ? Como os arquivos bashrc, os usuários da linha de comando compartilham seus scripts de produtividade ? O que eles chamaram? Meus favoritos widgets ?
-
CF. O mesmo tipo de problema solicitado aqui para o VIM Como faço para criar um atalho para um comando localizar e substituir no vim?
Eu votaria na maneira antiga: crie um bin-directory em seu diretório home e adicione-o ao PATH (algumas distribuições farão isso por padrão se encontrarem ~/bin
no login). Em seguida, crie os scripts que você achar úteis.
Por quê?
Aliases e funções de shell são bons de se ter, mas geralmente você só os possui no próprio Shell. Você não pode chamá-los de outros programas (como xargs) ou shells. Não é assim com arquivos de script. Você pode chamá-los como qualquer outro comando UNIX sem restrições. Se codificado com #! / Bin / usedshell, o shell atual não importa e eles podem ser chamados de qualquer outro shell também.
Se alguém alterar os scripts de login como. * profile e. * shrc, sempre será necessário fazer login em uma segunda tela para verificar se um erro de digitação não impedirá logins bem-sucedidos (irritantes).
Se eu tiver que trabalhar em outros ambientes de usuário, tenho meus scripts imediatamente disponíveis simplesmente anexando meu diretório bin ao PATH sem precisar modificar outras configurações de ambiente.
Nota adicional para iniciantes:
Não crie scripts ou aliases com muita conveniência para tarefas realmente simples. Chegará o momento em que é mais difícil lembrar de todos os seus próprios scripts do que lembrar os comandos unix em que eles são baseados: -)
Eu costumo colocar esses comandos em scripts bash no meu diretório ~ / bin. Eu gosto de usar scripts melhor que funções porque um script é imediatamente visível para todos os meus shells abertos.
Para comandos que eu não uso com freqüência, ou que eu preciso modificar a cada vez, eu tenho um arquivo de linhas de comando que eu procuro usando grep, então apenas copio e colo da tela para a linha de comando. / p>
Eu também mantenho um arquivo de histórico bash muito grande para que os comandos estejam disponíveis no histórico por pelo menos uma semana depois de usá-los. Se eu achar que sempre lembro do mesmo comando, coloco em um script.
Acabei de descobrir esta solução em outro lugar no superusuário que usa o comando bash history -s
para adicionar comandos ao seu histórico bash. Essa solução provavelmente está mais próxima de sua solicitação original.
Comece por encurtá-lo para
grep -ir 'search string' /directory
A opção -r
é para o modo recursivo.
: -)
Em geral, existem três maneiras de encurtar os comandos.
Aliases : muito básico, permite apenas a substituição de um comando. Pode ser colocado em ~/.bashrc
:
alias ll="ls -lFh"
alias md="mkdir"
expande ll ~/music
para ls -lFh ~/music
.
Os aliases também têm vantagens - podem ser expandidos em linha; você só precisa configurar um atalho de teclado para isso. Por exemplo, coloque o seguinte no seu ~/.inputrc
:
"\e[1;3C": alias-expand-line
Isto corresponde à tecla Alt Direita → .
Para algo mais complexo (vários comandos, argumentos) - funções permitem usar os recursos de sintaxe padrão; também em ~/.bashrc
:
count() {
sort "$@" | uniq -c | sort -n -r
}
Estes podem incluir vários comandos, definir variáveis, ter condições ... qualquer coisa que você possa fazer em um script de shell. Eles, no entanto, não podem ser expandidos em linha.
Scripts externos - quase o mesmo que funções, mas sem o foo() { ... }
e em um arquivo separado. ( ~/bin
é um local popular.)
#!/bin/bash
post() { curl -sF "sprunge=<$1" http://sprunge.us/; }
if [ -z "$1" ]; then
file=$(mktemp /tmp/sprunge.XXXXXXXX)
cat > "$file"
if [ -s "$file" ]; then
post "$file"
else
echo "stdin empty" >&2
fi
rm -f "$file"
else
for file; do
echo -n "$file →"
post "$file"
done
fi
A vantagem de colocar scripts em arquivos separados é uma: eles não estão limitados a bash
features. Houve muitos casos em que comecei com um script bash
, depois o reescrevi em Python, depois tornou-se Perl ...