O único parâmetro grande após bash -c
está entre aspas duplas. Isso significa que a substituição de certas coisas (incluindo $newfile
) é realizada aqui pelo shell mais externo, ou seja, o shell que está prestes a iniciar o gnome-terminal, antes de iniciá-lo. Nesse contexto, essa variável é indefinida.
Eu recomendo que você escolha um script separado, como mostrado na parte inferior da postagem. Os one-liners são terrivelmente ilegíveis de qualquer maneira.
Outras possibilidades incluem a troca das citações '
e "
na linha de comando, de modo que '
seja o externo (isto é, $newline
permanece $newline
e não é substituído pelo shell mais externo, é interpretado posteriormente pelo iniciado por gnome-terminal); ou escapando do sinal $
em $newfile
as \$newfile
.
E enquanto estamos nisso:
$(xsel ...)
executa o conteúdo da área de transferência como um comando (ou uma série de comandos) sem qualquer validação. Por exemplo. se sua área de transferência contiver a string rm -rf ~
, seu diretório inicial é whoops ido. Não sei qual é a sua intenção, mas, para sua segurança, você deve abandonar essa abordagem e encontrar outra solução!
echo File name?
realiza a correspondência de padrões de shell em arquivos cujos nomes consistem em cinco caracteres: name
e, em seguida, um caractere arbitrário. Use um par de aspas simples ou duplas.
Você se refere ao nome da variável $newfile
sem aspas. Isso resultará em comportamento defeituoso se contiver espaços em branco. Consulte-o como "$newfile"
.