Nas seguintes linhas,
workspace="~/GIT_Workspace/my_project/"
filename="~/GIT_Workspace/Back/$timestamp-$branch.tar.gz"
~
não está sendo expandido para seu diretório pessoal porque está entre aspas. Precisa estar fora das cotações para se expandir. Portanto, seu script está tentando abrir um arquivo que começa com um caractere literal ~
, que obviamente não existe.
Opções:
-
%código%. Geralmente, evitamos o uso de
variable="$HOME/GIT_Workspace"
em scripts e usamos~
, em vez de uma boa razão que não seja a de que a expansão de til é geralmente considerada um recurso interativo que não é usado de forma não interativa. (Má razão, mas aí está você ...) -
$HOME
sem nenhuma cotação. No entanto, geralmente tentamos usar citações de forma muito diligente em scripts, em oposição ao uso interativo, porque você nunca sabe quando alguém vai aparecer e fornecer um argumento ou parâmetro com um espaço e, em seguida, a cotação é necessária. Programa defensivamente. -
variable=~/GIT_Workspace
~ 'fora das aspas parece muito estranho, mas funciona.
Eu recomendo a primeira opção.
Outros comentários:
- Seu script não parece usar nenhum bashismo, portanto, pode ser executado com
variable=~"/GIT_Workspace" with the
portátil em vez de/bin/sh
. Encorajo-o a mudar a linha shebang e, em geral, a escrever scripts para/bin/bash
, a menos que você possa realmente tirar proveito de algum fundamento. - Se você usar o formato ISO 8601 para datas (
/bin/sh
), elas serão classificadas em ordem cronológica e também livres de dependências de idioma natural. Eu encorajo você a fazer isso também. - Você pode considerar o backup de repositórios git usando
%Y-%m-%d
em vez degit
. Você pode enviar para um repositório vazio que você mantém para o propósito. Você pode empurrar todos os ramos e o reflog também manterá o histórico em caso de erros.