linux - principianti - mastering bitcoin programming the open blockchain download




Come posso eseguire un programma con una directory di lavoro diversa da quella corrente, dalla shell di Linux? (8)

Usando una shell Linux, come posso avviare un programma con una directory di lavoro diversa dalla directory di lavoro corrente?

Ad esempio, ho un file binario helloworld che crea il file hello-world.txt nella directory corrente. Questo file si trova all'interno della directory /a . Attualmente sono nella directory /b . Voglio iniziare il mio programma in esecuzione ../a/helloworld e ottenere hello-world.txt da qualche parte in una terza directory /c .


Basta cambiare l'ultimo "&&" in ";" e tornerà indietro indipendentemente dal fatto che il comando abbia esito negativo o abbia esito positivo:

cd SOME_PATH && run_some_command ; cd -

Chiama il programma in questo modo:

(cd /c; /a/helloworld)

Le parentesi causano la generazione di una sotto-shell. Questa sub-shell quindi modifica la directory di lavoro in /c , quindi esegue helloworld da /a . Dopo che il programma è terminato, la sub-shell termina, ritornando al prompt della shell genitore, nella directory da cui hai iniziato.

Gestione degli errori: per evitare di eseguire il programma senza aver modificato la directory, ad esempio quando si ha sbagliato l'ortografia /c , rendere l'esecuzione di helloworld condizionata:

(cd /c && /a/helloworld)

Riduzione dell'utilizzo della memoria: per evitare che la sottospesa sprechi memoria mentre viene eseguito hello world, chiama helloworld tramite exec:

(cd /c && exec /a/helloworld)

[Grazie a Josh e Juliano per aver dato consigli su come migliorare questa risposta!]


Se vuoi eseguire questo all'interno del tuo programma, farei qualcosa del tipo:

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

  // rest of your program...

}

Se vuoi sempre che passi a / C, usa un percorso assoluto quando scrivi il file.


Un modo per farlo è creare uno script di shell wrapper.

Lo script della shell cambierà la directory corrente in / c, quindi eseguirà / a / helloworld. Una volta che lo script della shell viene chiuso, la directory corrente ritorna a / b.

Ecco un esempio di script di shell bash:

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

Un'opzione che non richiede una subshell ed è incorporata in bash

(pushd SOME_PATH && run_stuff; popd)

demo:

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

perché non tenerlo semplice

cd SOME_PATH && run_some_command && cd -

l'ultimo comando 'cd' ti riporterà all'ultima directory pwd. Questo dovrebbe funzionare su tutti i sistemi * nix.


sh -c 'cd /c && ../a/helloworld'




environment