see - Como posso executar um programa com um diretório de trabalho diferente do atual, do shell do Linux?



see env linux (8)

Usando um shell Linux, como faço para iniciar um programa com um diretório de trabalho diferente do diretório de trabalho atual?

Por exemplo, eu tenho um arquivo binário helloworld que cria o arquivo hello-world.txt no diretório atual. Este arquivo está dentro do diretório /a . Atualmente estou no diretório /b . Eu quero começar meu programa executando ../a/helloworld e obter o hello-world.txt em algum lugar em um terceiro diretório /c .

https://src-bin.com


Answer #1

Basta alterar o último "&&" para ";" e será cd de volta, não importa se o comando falhar ou tiver sucesso:

cd SOME_PATH && run_some_command ; cd -

Answer #2

Eu sempre acho que as ferramentas UNIX devem ser escritas como filtros, leitura de entrada de stdin e gravação de saída para stdout. Se possível, você poderia alterar seu binário do helloworld para gravar o conteúdo do arquivo de texto em stdout em vez de um arquivo específico. Dessa forma, você pode usar o shell para gravar seu arquivo em qualquer lugar.

$ cd ~ / b

$ ~ / a / helloworld> ~ / c / helloworld.txt


Answer #3

Se você quiser fazer isso dentro do seu programa, eu faria algo como:

#include <unistd.h>
int main()
{
  if(chdir("/c") < 0 )  
  {
     printf("Failed\n");
     return -1 ;
  }

  // rest of your program...

}

Answer #4

Se você sempre quiser ir para / C, use um caminho absoluto ao gravar o arquivo.


Answer #5

Uma maneira de fazer isso é criar um script de shell de wrapper.

O script de shell alteraria o diretório atual para / c e executaria / a / helloworld. Quando o script sair, o diretório atual será revertido para / b.

Aqui está um exemplo de script de shell bash:

#!/bin/bash
cd /c
/a/helloworld

Answer #6

Uma opção que não requer um subshell e é incorporada ao bash

(pushd SOME_PATH && run_stuff; popd)

Demonstração:

$ pwd
/home/abhijit
$ pushd /tmp # directory changed
$ pwd
/tmp
$ popd
$ pwd
/home/abhijit

Answer #7

por que não mantê-lo simples

cd SOME_PATH && run_some_command && cd -

o último comando 'cd' levará você de volta ao último diretório pwd. Isso deve funcionar em todos os sistemas * nix.


Answer #8
sh -c 'cd /c && ../a/helloworld'




environment