Se o uso de dirname $0 é um problema ou não, dependerá de como é usado. Sem mais detalhes, não podemos responder a isso.
Se (a) o uso de dirname $0 for um problema e (b) você não puder alterar o script, a solução é substituir o link flexível ~/sc/gremlin por um script:
#!/bin/sh
exec ~/../gremlin "$@"
Dessa forma, ~/../gremlin será executado com um $0 correto.
O uso de exec significa que o processo que está executando o script ~/../gremlin substituirá o processo que está executando ~/sc/gremlin . Isso é mais eficiente do que manter os dois processos em volta até que ~/../gremlin seja concluído.