Suponha que eu tenha um script como este:
(O exemplo descreve um caso de uso rysnc)
#!/bin/bash
echo -n "Enter Source Directory:"
read srcdir
echo -n "Enter Destination Directory:"
read dstdir
rsync -av --delete "$srcdir" "$dstdir"
A idéia aqui é solicitar ao usuário que digite os diretórios "Origem" e "Destino" para o rsync trabalhar. Como é, o usuário terá que entrar manualmente /path/to/directory/
via linha de comando.
Em vez disso , quero solicitar ao usuário que insira os caminhos por meio de uma interface GUI .
Algo assim:
Quais comandos posso usar para solicitar ao usuário uma janela de seleção da GUI que retorne o caminho do arquivo para a linha de comando?
command-line
gui
prompt
Pandya
fonte
fonte
Respostas:
Você pode usar isso para arquivos:
e isso para pastas:
para uso, execute:
Geralmente ele corresponde ao tema atual (para os gerenciadores de janelas GTK de qualquer maneira); na minha máquina, com uma versão modificada do Zukitwo 3.8, fica assim:
Uma maneira de usá-lo é assim:
O que resultaria em
you selected /path/to/file
.Você também pode usar opções para definir um título apropriado e o diretório em que ele começa - Com o seu caso de uso do rsync, por exemplo:
Para arquivos, você também pode especificar um tipo de arquivo para selecionar - por exemplo:
NOTA: Você também pode usar o YAD , um fork do Zenity que possui mais recursos.
Fonte
Na maioria das vezes, você pode usá-lo da mesma maneira - no navegador de arquivos:
e para a página de ajuda:
Embora na época (em torno da versão 26?), Ele não tivesse sido atualizado para corresponder à nova interface GTK 3.14+ (havia zenity) - ele tem mais recursos, mas verifique a compatibilidade (com base na documentação, ele deve funcionar no GTK +> = 2.16. 0 0
fonte
Apenas para o registro, você pode usar
dialog
uma solução de interface do usuário baseada em texto (TUI).Sintaxe:
Exemplo:
A saída será algo como isto:
Como apontado por @Wilf, você pode usar as variáveis
$LINES
e$COLUMNS
para fazê-lo preencher o terminal:fonte
$LINES
e$COLUMNS
- então você corre$(dialog --stdout --title "Please choose a file" --fselect $HOME/ $(expr $LINES - 15) $(expr $COLUMNS - 10))
para fazê-lo preencher a janela do terminal / tela.Sei que tem 8 meses e também que a pergunta do OP foi respondida. No entanto, o yad foi mencionado, mas nenhum exemplo foi oferecido. Aqui está a minha solução usando yad.
O modo como funciona é assim. Colocamos Yad em um loop, definindo a variável
$location
parasource
a primeira passagem edestination
para o segundo. A saída é colocada na matrizselection[]
para a qual a variáveli
é usada como índice. Isso é definido como 0 no início e incrementado a cada passagem. Portanto, a fonte é salva como${selection[1]}
e o destino${selection[2]}
.O DIR = "/ home" na primeira linha define o padrão da caixa de diálogo. As opções de comando yad podem ser encontradas no terminal digitando
yad --help
.fonte
Aqui está a solução mais curta (e melhor) para a resposta:
Yad
fornece a opção exata da mesma formazenity
que:Isso abre uma caixa de diálogo de seleção de diretório. Sem o argumento adicional
--directory
, será uma caixa de diálogo de seleção de arquivo.fonte