bash: comando cut não produz nada (apenas uma linha em branco)

2

Eu tenho um problema em poder fazer eco de uma parte de uma string.

Aqui está uma versão simplificada:

t=no_1187985:/home/my.name/testing/no

Eu quero fazer o eco no_1187985 apenas assim:

tt=$(echo $t | cut -d":" -f 1)
echo $tt

Mas isso produz apenas um espaço em branco (e um comando não encontrou um erro no meu script real)

Se eu mudei -f 1 para - f 2, funciona para o segundo campo, não entendo porque não o primeiro.

Aqui está uma parte do meu código real para o contexto:

while read line;
    do
        #echo $line
        #sleep 1
        path=$(dirname "$line")
        #echo $path
        #mkdir -p $(echo $path | cut -d":" -f 2)
        inode= $(echo $path | cut -d":" -f 1)
        echo $inode
        #mv ~/deleted/$inode $(echo $line | cut -d":" -f 2);
    done < .temp

Esta é uma tentativa de criar uma recyclebin .temp é um arquivo com os nomes de caminho de arquivos diferentes para 'restaurar'. o laço olha através de cada linha. Ele recria a árvore de diretórios antes de mover os arquivos de volta para eles. os arquivos estão atualmente armazenados na pasta excluída e têm seu número de inode anexado ao final. Quando o arquivo é 'restaurado' (ou seja, movido de volta), o inode é removido do nome do arquivo.

o arquivo .temp contém o nome do arquivo (o original e o inode combinados) e o nome do caminho original são separados por um delimitador ":".

    
por user3120554 23.08.2015 / 17:25

1 resposta

8

Você não deve ter espaços em torno do símbolo = para atribuições de variáveis.

Cenário 1:

  • inode = something - bash tenta executar um comando chamado inode com 2 argumentos.
  • É o equivalente a dizer: inode "=" "something"

Cenário 2:

  • inode =something - bash tenta executar um comando chamado inode com 1 argumento (a string '=something' )
  • É o equivalente a dizer: inode "=something"

Cenário 3:

  • inode= something - bash tenta executar o comando something com inode definido para a cadeia vazia em seu ambiente.
  • É o equivalente a dizer: inode="" something

Nota : Verifique a seção 2.9.1 Comandos simples da referência fornecida abaixo.

Referência: Linguagem de comandos da Shell

    
por 23.08.2015 / 18:06