GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Einen bestimmten Befehl in einem bestimmten Verzeichnis ausführen, ohne dazu zu wechseln?

Ich weiß nicht, ob das zählt, aber Sie können eine Subshell erstellen:

$ (cd /var/log && cp -- *.log ~/Desktop)

Das Verzeichnis wird nur für diese Subshell geändert, sodass Sie sich die Arbeit sparen müssen, cd - zu müssen danach.


Einige Programme haben Optionen, mit denen Sie ihnen chdir(2) mitteilen können selbst (z. B. GNU tar ’s -C /--directory ).

Außerhalb solcher Programme muss jedoch etwas chdir werden . Sie könnten eine Art kompiliertes „binäres“ Programm schreiben und verwenden, anstatt die Shell dies tun zu lassen, aber es würde wahrscheinlich keinen großen Nutzen bringen.

In einem Kommentar in einer anderen Antwort haben Sie ein Beispiel gegeben:

execindirectory -d /var/log "cp *.log ~/Desktop"

Seit *.log Muster wird von der Shell selbst erweitert (nicht cp ), etwas muss chdir werden in das Verzeichnis, bevor Sie Ihren Befehl von einer Shell auswerten lassen.

Wenn Sie nur daran interessiert sind, „zurück cd“ zu vermeiden, können Sie eine Subshell verwenden, um den Effekt des cd zu isolieren von Ihrer funktionierenden Shell-Instanz.

(cd /path/to/dir && some command)

Sie können dies in eine Shell-Funktion packen. (Ich habe -d weggelassen Option aus Ihrer Beispielverwendung, da dieser Befehl wenig Sinn macht, wenn das Verzeichnis tatsächlich optional ist.)

runindir() { (cd "$1" && shift && eval "[email protected]"); }

runindir /var/log 'cp *.log ~/Desktop'  # your example
runindir /var/log cp \*.log \~/Desktop  # eval takes multiple args

runindir /var/log cp \*.log ~/Desktop   # it is okay to expand tilde first

Um den Wert der Antworten anderer nicht zu unterminieren, aber ich glaube, Sie wollen dieses:

(cd /path/to && ./executable [ARGS])

Beachten Sie die Klammern zum Aufrufen von cd in einer Sub-Shell.


Linux
  1. Wie führe ich einen Befehl in der Shell aus, ohne ihn im Verlauf zu speichern? [Linux-Tipps]

  2. Pwd ohne Symlinks?

  3. Einen bestimmten Befehl in einem bestimmten Verzeichnis ausführen, ohne ihn zu kopieren?

  4. Linux-Befehl zum Verschieben des Verzeichnisses

  5. Kann ich unter Unix 'make' in einem Verzeichnis ausführen, ohne zuerst in dieses Verzeichnis zu wechseln?

Cd-Befehl in Linux (Verzeichnis wechseln)

Du-Befehl unter Linux

mv-Befehl unter Linux

So wechseln Sie automatisch zu einem Verzeichnis, ohne den Cd-Befehl in Linux zu verwenden

Verschiedene Möglichkeiten zum Auflisten von Verzeichnisinhalten ohne Verwendung des Befehls ls

Kopieren Sie bestimmte Dateitypen, während Sie die Verzeichnisstruktur in Linux beibehalten