Se o seu script é
#!/bin/bash
[[ -e "" ]] && readlink -f -- ""
E tem permissão de execução ( chmod u+x scriptname
) Você pode inserir
./scriptname file
Para obter o caminho completo se o arquivo existir (embora esteja correto que o teste seja redundante se usarmos readlink -e
e George está certo de usar realpath
em vez de readlink
)
Notas
-
[[ -e "" ]]
teste se, o primeiro argumento do script, existe
-
&&
se isso acontecer (se o comando anterior foi bem sucedido) então faça o próximo comando -
readlink -f -- ""
imprime o caminho completo (para o arquivo real, mesmo queseja um link simbólico)
OP caracteres especiais solicitados são impressos com escapes. Deve haver uma maneira inteligente *, mas eu fiz assim (embora não lide com aspas simples - mas elas não podem ser ignoradas de qualquer maneira)
[[ -e "" ]] && readlink -f -- "" | sed -r 's/\||\[|\]| |!|"|$|%|\^|&|\*|\(|\)\{|\}|\#|@|\;|\?|<|>/\&/g'
Se são apenas espaços que você está preocupado, você pode fazer isso
sed 's/ /\ /g'
Isso obteria aspas simples (não muito úteis) e espaços
sed -r "s/'| /\\&/g"
Mas eu não acho que você pode pegar aspas simples e aspas duplas ...
* Aqui está a maneira inteligente, 100% de crédito para
[[ -e "" ]] && printf "%q\n" "$(readlink -f -- "")"