GNU/Linux >> Linux の 問題 >  >> Linux

シェルスクリプトで実装すると履歴置換が失敗しますか?

この質問にはすでに回答があります :スクリプトで履歴拡張が無効になっていますか?

(1つの回答)
1年前に閉鎖されました。

以下のコマンドはコマンドラインで機能します

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

出力09_03_2016

しかし、シェルスクリプトでこれを行うと、機能しません

#! /bin/bash

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

出力!:3

承認された回答:

スクリプトで次のディレクティブを使用します。

set -o history
set -o histexpand

これにより、デフォルトでインタラクティブシェルに対してのみ有効になっている履歴拡張が有効になります。

man bashを参照してください セクションHISTORY EXPANSION およびSHELL BUILTIN COMMANDS コマンドset 詳細については。


Linux
  1. 実行時にスクリプトでシェルを決定しますか?

  2. ソースシェルスクリプトへのパスを決定しますか?

  3. `:-`はシェルスクリプトで何を意味しますか?

  1. 壊れた歴史?

  2. ショートカットキーが押されたときにシェルでスクリプトを実行するにはどうすればよいですか?

  3. インタラクティブシェルのセッションのプロセスとスクリプトのプロセス?

  1. $の意味は?シェルスクリプトでは?

  2. 星のピラミッドを出力するシェルスクリプト

  3. シェルスクリプトの現在のディレクトリ?