alias para data-carimbo para criar um diretório (em .bashrc) [duplicado]

1

Estou tentando criar um alias em .bashrc para marcar um diretório em um carimbo de data / hora. Obviamente, não está funcionando muito bem para mim. Por exemplo:

em .bashrc

alias testit="export testor=$(date +%d);mkdir ~/Desktop/$testor"

resultado:

~> testit
mkdir: cannot create directory ‘/home/SJL/Desktop/’: File exists

agora se eu executar o comando

~> export testor=$(date +%d)
~> mkdir ~/Desktop/$testor

diretório criado, sem problemas.

Agora, se eu corro:

~> export testor=$(date +%d);mkdir ~/Desktop/$testor

novamente, sem problemas.

voltar a usar o alias indicado em .bashrc não funciona.

É realmente curioso porque fiz coisas semelhantes muitas e muitas vezes, mas parece que há algo errado com a formatação da data.

Eu realmente aprecio sua opinião.

    
por user231192 13.05.2017 / 10:15

1 resposta

1

Quando você cria o alias, $testor não tem valor e, portanto, o alias será

export testor=13;mkdir ~/Desktop/

Você pode ver o que um alias expande para com alias aliasname .

Para corrigir isso, use aspas simples em vez de aspas duplas. Isso adia a expansão de variáveis e substituições de comandos até que você invoque o alias.

Se você não precisa de $testor para mais nada, basta usar

alias tester='mkdir "$HOME/Desktop/$(date '+%d')"'

Lendo seus comentários, isso também funcionaria:

alias makedir='mkdir "$HOME/Desktop/$(date '+%d')"'
alias copyfile='cp somefile "$HOME/Desktop/$(date '+%d')"

Ou, alternativamente, uma função de shell mais elaborada que permite copiar qualquer arquivo para a pasta (que você nunca seria capaz de fazer com um alias).

copyfile () {
    destfolder="$HOME/Desktop/$(date '+%d')"
    if [ -d "$destfolder" ]; then
        mkdir "$destfolder"
    fi
    cp "$1" "$destfolder"
}

Isso define uma função chamada copyfile que usará cp para copiar o arquivo fornecido na linha de comando para uma pasta com data e hora. Se a pasta não existir, ela será criada.

    
por 13.05.2017 / 10:27