Isso cheira muito a um problema XY . Se você quiser que oldcommand
trate todos os nomes de arquivos relativos em relação a um diretório diferente, altere o diretório atual!
(cd path && oldcommand -nonfileoption1 x1 -fileoption2 x2 -fileoption3 x3 -nonfileoption4 x4)
Os parênteses asseguram que a mudança do diretório é local: o próximo comando será executado no diretório original.
Se você quiser empacotar isso em um script:
#!/bin/sh
cd "$1" && shift && "$@"
Uso:
run-in path oldcommand -nonfileoption1 x1 -fileoption2 x2 -fileoption3 x3 -nonfileoption4 x4
Para uso de linha de comando, no entanto, uma alteração de diretório temporário pode ser mais conveniente. Requer um pouquinho mais de digitação, mas permite que a finalização do nome do arquivo funcione fora da caixa. (Você pode fazer o trabalho de conclusão do método de script de wrapper, mas precisará definir uma função de conclusão para o script run-in
.)
cd path
oldcommand -nonfileoption1 x1 -fileoption2 x2 -fileoption3 x3 -nonfileoption4 x4
cd -
ou
pushd path
oldcommand -nonfileoption1 x1 -fileoption2 x2 -fileoption3 x3 -nonfileoption4 x4
popd
Comparado ao que você está perguntando, isso faz com que todos os nomes de arquivos relativos sejam relativos a path
, não apenas aqueles transmitidos na linha de comando, mas qualquer nome de arquivo relativo que oldcommand
use internamente. Isso também pressupõe que oldcommand
não mude para um diretório diferente. Ambas as suposições são atendidas por muitos comandos.