The Magic ~:5 つの例を使用した Bash Tilde 拡張
Bash シェルは、チルダ拡張と呼ばれる「~」(チルダという名前) が前に付いた変数をいくつか提供します。
これらは、シェル内の他の変数の内容と同義です。
チルダ展開は、これらの略語を、それらが表すディレクトリ名に変換するプロセスです。この記事では、例を使用してチルダ拡張機能を確認してみましょう。
チルダ拡張は、「~」プラス文字に適用され、空白またはスラッシュまでの +、–、および N (整数) が含まれます。 .
チルダ展開は、いくつかの特定のパス名に展開するために使用されます:
- ホーム ディレクトリ
- 現在/以前の作業ディレクトリ
- ディレクトリ スタックからのディレクトリ
ホーム ディレクトリ
チルダ展開は、現在のユーザーのホーム ディレクトリまたは指定されたユーザー名のホーム ディレクトリを展開する方法を提供します。
Syntax ~ Expand to the variable $HOME or home directory of the current user ~USER Expand to the home directory of the given username
例 1. 現在のユーザーのホーム
チルダ (~) は別の単語として、定義されている場合は $HOME に展開されます。$HOME が定義されていない場合は、現在のユーザーのホーム ディレクトリで展開されます。
現在、HOME 変数の値は /home/oracle であるため、cd ~ は現在のディレクトリを $HOME の値に変更しました。
<センター> センター>## Logging into a oracle user, whose home directory is /home/oracle # su oracle [tmp]$ pwd /tmp [tmp]$ echo $HOME /home/oracle [tmp]$ cd ~ [~]$ pwd /home/oracle
HOME は /sbin に変更され、cd ~ はユーザーのホーム ディレクトリではなく $HOME のみを使用します。 $HOME の値を unset した後、cd ~ でディレクトリを /etc/passwd で oracle ユーザーに設定されているホーム ディレクトリの値に変更しました。チルダ展開の場合、HOME は実際のホーム ディレクトリを上書きします。
[~]$ export HOME=/sbin [oracle]$ cd ~ [~]$ pwd /sbin [~]$ unset HOME [sbin]$ cd ~ [oracle]$ pwd /home/oracle
例 2. 特定のユーザーのホーム ディレクトリ
次のスクリプトは、名前に現在の日付が含まれるログ ファイルのバックアップを作成します。また、開始時刻と終了時刻を oracle ユーザーのホーム ディレクトリにある backup.log というファイルに記録します。
#! /bin/bash echo "Initiating the backup at `date`" >> ~oracle/backup.log da=`date +%F` cp $da.log{,.bak} echo "END BACKUP at `date`" >> ~oracle/backup.log $ ls -l /home/oracle/ total 8 -rw-r--r-- 1 root root 99 Jun 4 14:23 backup.log
指定されたユーザー名が存在しない場合、何かに展開されません。次の例では、ora というユーザーはいません。したがって、~ora は /home/ora に展開されません。
$ echo ~ora ~ora
bash でブレース展開を実行する方法については、以前の記事を参照してください。つまり、bash で { } を使用する方法
作業ディレクトリ
+ と – の付いたチルダは、作業ディレクトリを表すために使用されます。
- ~+ は、現在の作業ディレクトリを保持する PWD 変数の値に展開されます。
- ~- 以前の作業ディレクトリを保持する OLDPWD 変数の値に展開されます。 OLDPWD が設定されていない場合、~- は展開されません。
例 3. 古い/現在の作業ディレクトリの展開
次の例では、現在のディレクトリと以前の作業ディレクトリのファイルを比較します。
$ cat comp.sh #! /bin/bash set -x cd /var/opt/gg if [ -f gg.c ] then echo "File1 exists" fi cd /var/opt1/gg if [ -f gg.c ] then echo "File2 exists" cmp ~+/gg.c ~-/gg.c fi $ ./comp.sh + cd /var/opt/gg + '[' -f gg.c ']' + echo 'File1 exists' File1 exists + cd /var/opt1/gg + '[' -f gg.c ']' + echo 'File2 exists' File2 exists + cmp /var/opt1/gg/gg.c /var/opt/gg/gg.c cmp: EOF on /var/opt1/gg/gg.c $
上記の実行では:
- ~+/gg.c は /var/opt1/gg/gg.c に展開されます
- ~-/gg.c は /var/opt/gg/gg.c に展開されます
この記事は、進行中の Bash チュートリアル シリーズの一部です。
スタック内のディレクトリの拡張
各 bash プロセスには、スクリプトがディレクトリ コンテンツのデータを処理している間にアクセスしたディレクトリを追跡するために使用できるスタック オブジェクトが含まれています。
ディレクトリを参照したり、以前にアクセスしたディレクトリに戻すことができるのは、非常に単純なメカニズムです。チルダ展開は、ディレクトリ スタック内のディレクトリへの展開も提供します。
- ~+N ディレクトリ スタックの N 番目のディレクトリ (オプションなしで呼び出されたときに dirs によって出力されたリストの左から数えて) をゼロから展開します。
- ~-N ディレクトリ スタックの N 番目のディレクトリ (オプションなしで呼び出されたときに dirs によって出力されたリストの右から数えて) をゼロから展開します。
以前の記事を参照して、dirs、pushd、および popd コマンドを使用してディレクトリ スタックを操作する方法を理解してください。
例 4. ~+ を使用して左から N 番目のディレクトリを表示
次の例では、ディレクトリ スタックに 4 つのディレクトリがあります。 ~+2 は、ゼロから始まる左から 2 番目の位置で使用可能なディレクトリ パスを提供します。
$ dirs -v 0 /sbin 1 /var/opt/midas 2 /var/opt/GG/bin 3 /root $ cd ~+2 $ pwd /var/opt/GG/bin
ただし、スタックの一番上 (ゼロ位置) には常に現在のディレクトリがあります。したがって、上記の実行後、ディレクトリ スタックには次のように表示されます。
$ dirs -v 0 /var/opt/GG/bin 1 /var/opt/midas 2 /var/opt/GG/bin 3 /root
例 5. ~- を使用して右から N 番目のディレクトリを表示
以下は、上記の例と同様です。ただし、~-.
があるため、スタックの一番下からディレクトリを検討します。$ dirs -v 0 /var/opt/GG/bin 1 /var/opt/midas 2 /var/opt/GG/bin 3 /root $ cd ~-2 $ pwd /var/opt/midas $ dirs -v 0 /var/opt/midas 1 /var/opt/midas 2 /var/opt/GG/bin 3 /root
-
Linuxでwatchコマンドを使用する方法と例
Linuxのwatchコマンドは1つのことを行います。コマンドを繰り返し、結果を繰り返し出力して、変更を監視できるようにします。使用方法は次のとおりです。 watchコマンド構文 watchコマンドの構文は次のとおりです。 watch OPTIONS COMMAND 注: オプション 以下の表のオプションのリストである必要があります。これにより、ウォッチのデフォルトの動作が変更されます。 コマンド コマンド 監視するコマンドです 繰り返し実行する必要があります。これは、出力を監視します 見る 中断されるまで実行されます(したがって、 CTRL+Cを押して終了します ) オプション 時
-
6 つの実用的な例を含む Bash シェル関数のチュートリアル
Bash シェル関数は、グループに単一の名前を使用して、後で実行するために複数の UNIX / Linux コマンドをグループ化する方法です。 . Bash シェル関数は、通常の Unix コマンドと同じように実行できます。シェル関数は、それらを解釈するための新しいプロセスを作成することなく、現在のシェル コンテキストで実行されます。bash エイリアスと関数の両方を使用すると、より長い、またはより複雑なコマンドのショートカットを定義できます。ただし、エイリアスは、このチュートリアルで説明されているように、これらの関数が許可する制御フロー、引数、およびその他の巧妙なものを許可しません。 この