GNU/Linux >> Znalost Linux >  >> Linux

Substituce historie selže při implementaci do skriptu Shell?

Tato otázka zde již má odpověď :Je ve skriptech zakázáno rozšíření historie?

(1 odpověď)
Uzavřeno před 1 rokem.

Níže uvedený příkaz funguje v příkazovém řádku

rsync -avh -r /Source/09_03_2016/ /Destination/
echo $(basename !:3)

Výstup 09_03_2016

Ale když to udělám ve skriptu shellu, nefunguje to

#! /bin/bash

/usr/bin/rsync -avh -r /Source/09_03_2016 /Destination/;
echo $(basename !:3)

Výstup !:3

Přijatá odpověď:

Ve skriptu použijte následující příkazy:

set -o history
set -o histexpand

To povolí rozšíření historie, které je ve výchozím nastavení povoleno pouze pro interaktivní shelly.

Viz man bash sekce HISTORY EXPANSION a SHELL BUILTIN COMMANDS příkaz set pro podrobnosti.


Linux
  1. Určit prostředí ve skriptu za běhu?

  2. Určení cesty ke zdrojovému skriptu Shell?

  3. Co znamená `:-` ve skriptu Shell?

  1. Jak spustit událost ve skriptu Shell, když je odebráno zařízení USB?

  2. Zkažená historie?

  3. Jak spustit skript v prostředí Shell, když je stisknuta klávesová zkratka?

  1. Jak spustit skript shellu, když se změní soubor nebo adresář?

  2. Paralelní spuštění skriptu shellu

  3. Aktuální adresář skriptu Shell?