GNU/Linux >> Linux Esercitazione >  >> Linux

Cambia la directory di lavoro nella shell con uno script python

Non sarà possibile.

Il tuo script viene eseguito in una sub-shell generata dalla shell madre in cui è stato emesso il comando.

Qualsiasi cd ing fatto nella sub-shell non ha effetto sulla shell madre.


Altri hanno sottolineato che non puoi cambiare la directory di lavoro di un genitore da un bambino.

Ma c'è un modo per raggiungere il tuo obiettivo -- se usi cd da una funzione di shell, può cambia la directory di lavoro Aggiungi questo al tuo ~/.bashrc:

go() {
    cd "$(python /path/to/cd.py "$1")"
}

Il tuo script dovrebbe stampare il percorso della directory in cui vuoi passare. Ad esempio, questo potrebbe essere il tuo cd.py:

#!/usr/bin/python
import sys, os.path
if sys.argv[1] == 'tdi': print(os.path.expanduser('~/long/tedious/path/to/tdi'))
elif sys.argv[1] == 'xyz':  print(os.path.expanduser('~/long/tedious/path/to/xyz'))

Allora puoi fare:

[email protected]:/home/$> go tdi
[email protected]:/home/tdi$> go tdi

cd è implementato esclusivamente (?) come comando interno della shell, perché qualsiasi programma esterno non può modificare il CWD della shell madre.


Come scrive codaddict, ciò che accade nella tua sub-shell non influisce sulla shell genitore. Tuttavia, se il tuo obiettivo è presentare all'utente una shell in una directory diversa, puoi sempre fare in modo che Python usi os.chdir per cambiare la directory di lavoro della sub-shell e quindi lanciare un nuovo shell da Python. Questo non cambierà la directory di lavoro della shell originale, ma lascerà all'utente una directory diversa.


Linux
  1. Algebra vettoriale su Scientific Linux 7.1 con script Python:parte 1

  2. Passare il nome del file con spazi a uno script di shell?

  3. Da dove viene eseguito uno script di shell?

  4. Directory corrente dello script Shell?

  5. Impossibile terminare lo script Python con Ctrl-C

Come eseguire un comando Shell con Python

Come eseguo un programma con una directory di lavoro diversa da quella corrente, dalla shell di Linux?

Come cambiare una parola in un file con lo script della shell linux

Possibile script misto shell e python?

Debug in pyCharm con privilegi sudo?

La linea di Ubuntu Python shebang non funziona