custom nemoo actions / bash script

1

Estou tentando adicionar uma ação personalizada ao gerenciador de arquivos nemo. O objetivo da ação é apenas substituir todos os espaços em branco no nome do arquivo por "_". Meu arquivo de ação é assim:

[Nemo Action]
Name=Normalize
Comment=replace all occurences of " " by "_"
Exec=<normalize.sh %F>
Selection=Any
Extensions=Any

O script bash normalize.sh é o diretório de ações e se parece com isto:

#!/usr/bin/bash

if [[ "$#" != 1 ]]
    then exit 1
fi

name='echo "$1" | sed "s/\ /\_/g"'
mv "$1" "$name"

exit 0

Alguém sabe por que isso não está funcionando?

    
por user3802900 18.04.2015 / 17:51

1 resposta

0

O problema:

Seu problema é tão trivial, que %F é o nome do arquivo, e o nome do arquivo contém espaços, então você está chamando o script desta forma:

normalize.sh my fancy file

Portanto, $1 se torna my , $2 se torna fancy e $3 se torna file . Agora $# se torna 3.

Correção 1 (recomendado):

Para consertar isso. você não precisa verificar o número de argumentos. Então você pode usar $@ em vez de $1 . O script ficará assim:

#!/usr/bin/bash

name='echo "$@" | sed "s/\ /\_/g"'
mv "$@" "$name"

exit 0

Correção 2:

Outra solução é colocar aspas em torno de %F . O código correto seria este:

[Nemo Action]
Name=Normalize
Comment=replace all occurences of " " by "_"
Exec=<normalize.sh "%F">
Selection=Any
Extensions=Any

Script melhorado:

#!/usr/bin/env bash

mv "$@" "$(tr ' ' '_' <<< '$@')"
exit 0
  • Normalmente, bash está em /bin/bash . Como o seu parece estar em /usr/bin/bash (a primeira vez que vejo isso) eu coloquei uma solução universal para executar o bash onde quer que esteja. No entanto, você pode ver o caminho para basear a digitação de which bash em um terminal.
  • Removido condicional para contar argumentos.
  • Por que usar sed para esse tr ?
  • Em vez de echo do arquivo para sed ou tr , use melhor <<< .
  • Por que não colocar tudo em uma linha?
por 18.04.2015 / 17:56