Executável localizado no local A como executá-lo no local B?

1

Então, eu tenho um executável no meu servidor debian e este executável localizado em /home/human/ExecuteIt , mas ainda não consigo descobrir como executar meu executável em outro local. No meu caso, é /home/human/ExecuteIt/FolderWithConfiaguration/Configuration1/ .

Normalmente, para apenas 1 pasta de configuração, posso simplesmente copiar / colar um executável no /home/human/ExecuteIt/FolderWithConfiaguration/Configuration1/ e, em seguida, usar sudo chmod +x ./executable executá-lo com êxito, mas meu executável tem várias pastas de configuração que contêm configurações diferentes.

Seria ótimo se eu pudesse ter meu executável separado e executá-lo com configuração diferente sem copiar / colar. Existe uma maneira de executar meu executável em local diferente?

    
por Hu Man 18.03.2013 / 13:50

2 respostas

1

Se o seu executável estiver obtendo sua configuração a partir de um caminho relativo, esse caminho será relativo ao pwd (diretório de trabalho atual). Então:

> cd /there/locA
> pwd
/there/locA
> /there/stuff/executable

O executável será relacionado ao locB. Agora:

> cd /there/locB
> pwd
/there/locB
> /there/stuff/executable

O executável será relacionado ao locB.

Se você quer dizer que quer rodar o executável enquanto o pwd é locB, mas magicamente buscar a configuração do locB, a resposta é que a única maneira de fazer isso seria de alguma forma informar ao executável que, por exemplo, adicionando um parâmetro de linha de comando com o qual invocá-lo ou usando uma variável de ambiente personalizada. Basta copiar o executável para o locA e, em seguida, tentar invocá-lo especificamente a partir do locB, esperando que ele use o locA como o pwd não funcionará - o pwd ainda é locB.

Eu notei configurar $ PWD para um único comando:

> PWD=/there/locA bash -c 'echo $PWD'
/there/locB

não funciona. Então talvez você não possa falsificar o pwd.

    
por 18.03.2013 / 14:36
0

Não sei se entendi sua pergunta, então vou reiterar o que entendo com minhas próprias palavras. Você tem um programa que procura seus arquivos de configuração no mesmo diretório em que o programa está localizado. Por exemplo, se você executar /home/human/ExecuteIt/FolderWithConfiaguration/Configuration1/executable , ele procurará arquivos de configuração em /home/human/ExecuteIt/FolderWithConfiaguration/Configuration1 . Você deseja poder executar o programa com configurações diferentes, por exemplo /home/human/ExecuteIt/FolderWithConfiaguration/Configuration2 . E você não quer fazer várias cópias do programa.

Você pode criar links simbólicos para o executável em vários diretórios e criar links simbólicos para todos os arquivos comuns também . Por exemplo, suponha que o programa exija três arquivos: o executável executable , um arquivo de dados data e um arquivo de configuração config . Você tem duas configurações diferentes, que você coloca em /home/human/ExecuteIt/FolderWithConfiaguration/Configuration1/config e /home/human/ExecuteIt/FolderWithConfiaguration/Configuration2/config . Você tem uma cópia do executável e do arquivo de dados, ambos em /home/human/ExecuteIt/FolderWithConfiaguration/Configuration1/ . E você cria um link simbólico para /home/human/ExecuteIt/FolderWithConfiaguration/Configuration1/executable no diretório /home/human/ExecuteIt/FolderWithConfiaguration/Configuration2/ , além de um link simbólico para /home/human/ExecuteIt/FolderWithConfiaguration/Configuration1/data .

cd /home/human/ExecuteIt/FolderWithConfiaguration/Configuration2
ln -s ../Configuration1/executable ../Configuration1/data

Os links simbólicos dizem ao sistema para procurar o arquivo real em um lugar diferente. Eles não contêm dados, por isso, se você atualizar o executável ou os dados em Configuration1 , isso se aplica a todas as configurações; e há apenas uma cópia dos arquivos, portanto, as configurações adicionais exigem apenas o espaço em disco para o arquivo de configuração.

A maioria dos programas que se comportam dessa maneira considera a localização do executável ao procurar por arquivos de dados e de configuração. Se o seu seguir o link simbólico, esse método não funcionará. Em vez disso, você pode criar um link físico . Links físicos são múltiplos caminhos para os mesmos arquivos; Todos os hard links para um arquivo são equivalentes.

cd /home/human/ExecuteIt/FolderWithConfiaguration/Configuration2
ln ../Configuration1/executable ../Configuration1/data

Isso dificulta a atualização dos arquivos, já que você precisa atualizar o arquivo designado por todos os caminhos. Além disso, todos os hard links para o mesmo arquivo precisam estar no mesmo sistema de arquivos.

    
por 19.03.2013 / 00:28