GNU/Linux >> Znalost Linux >  >> Linux

Spustit konkrétní příkaz v daném adresáři bez cd'ingu?

Nevím, jestli se to počítá, ale můžete vytvořit subshell:

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

Adresář se změní pouze pro tento subshell, takže se vyhnete práci s cd - poté.


Některé programy mají možnosti, pomocí kterých jim můžete sdělit chdir(2) sami (např. GNU tar -C /--directory ).

Mimo tyto programy však bude muset něco chdir . Mohli byste napsat a použít nějaký zkompilovaný „binární“ program místo toho, aby to dělal shell, ale pravděpodobně by to nepřineslo mnoho výhod.

V komentáři v jiné odpovědi jste uvedli příklad:

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

Od *.log vzor je rozbalen samotným shellem (nikoli cp ), bude muset něco chdir do adresáře předtím, než shell vyhodnotí váš příkaz.

Pokud vás zajímá, jak se vyhnout nutnosti „cd back“, pak můžete použít subshell k izolaci efektu cd z vaší pracovní instance shellu.

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

Můžete to zabalit do funkce shellu. (Vypustil jsem -d volba z vašeho příkladu použití, protože tento příkaz nemá smysl, pokud je adresář skutečně volitelný.)

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

Nechci podkopávat hodnotu odpovědí ostatních lidí, ale věřím, že to, co chcete, je toto:

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

Všimněte si závorek pro vyvolání cd v podskořápce.


Linux
  1. Jak provést příkaz v prostředí Shell bez jeho uložení do historie? [Tipy pro Linux]

  2. Příkaz přesunutí adresáře pro Linux

  3. Mohu v Unixu spustit 'make' v adresáři, aniž bych do tohoto adresáře nejprve cd'oval?

  1. Jak použít příkaz 'mv' k přesunutí souborů kromě souborů v konkrétním adresáři?

  2. Jak použít příkaz 'cp' k vyloučení konkrétního adresáře?

  3. Proveďte příkaz, aniž byste jej uchovávali v historii

  1. Pwd bez symbolických odkazů?

  2. Vykonat konkrétní příkaz v daném adresáři, aniž byste do něj cd’ing?

  3. Shellscript pro sledování souboru protokolu, pokud klíčové slovo spustí a poté provede příkaz?