Bash/Tildeexpansion: Unterschied zwischen den Versionen

Aus Foxwiki
K Textersetzung - „== Syntax ==“ durch „== Aufruf ==“
 
(19 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''topic''' kurze Beschreibung
'''topic''' - Beschreibung


== Beschreibung ==
== Beschreibung ==
Zeile 34: Zeile 34:
Folglich kann man Dateinamen mit Tilden in Zuweisungen an PATH, MAILPATH und CDPATH verwenden, und die Shell weist den erweiterten Wert zu.
Folglich kann man Dateinamen mit Tilden in Zuweisungen an PATH, MAILPATH und CDPATH verwenden, und die Shell weist den erweiterten Wert zu.


== Anwendungen ==
== Anwendung ==
  $ export PATH="$PATH:~/testdir"
  $ export PATH="$PATH:~/testdir"
~/testdir wird zu $HOME/testdir erweitert.  
~/testdir wird zu $HOME/testdir erweitert.  


Wenn $HOME /home/user ist, wird das Verzeichnis /home/user/testdir der PATH-Variable hinzugefügt.
Wenn $HOME /home/user ist, wird das Verzeichnis /home/user/testdir der PATH-Variable hinzugefügt.


== Syntax ==
=== Current Users Home ===
=== Optionen ===
=== Parameter ===
=== Umgebungsvariablen ===
=== Exit-Status ===
== Konfiguration ==
=== Dateien ===
== Sicherheit ==
== Dokumentation ==
=== RFC ===
=== Man-Pages ===
=== Info-Pages ===
== Siehe auch ==
== Links ==
=== Projekt-Homepage ===
=== Weblinks ===
=== Einzelnachweise ===
<references />
== Testfragen ==
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 1''
<div class="mw-collapsible-content">'''Antwort1'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 2''
<div class="mw-collapsible-content">'''Antwort2'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 3''
<div class="mw-collapsible-content">'''Antwort3'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 4''
<div class="mw-collapsible-content">'''Antwort4'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 5''
<div class="mw-collapsible-content">'''Antwort5'''</div>
</div>
 
[[Kategorie:Entwurf]]
[[Kategorie:Bash:Expansionen]]
 
= TMP =
The Bash shell provides some variables that are prefixed with ‘~’ (named tilde) which is called Tilde Expansions.
* They are synonyms for contents of other variables within your shell.
* Tilde expansion is the process of converting these abbreviations to the directory names that they stand for. In this article, let us review the tilde expansion feature with the examples.
* Tilde expansion applies to the ‘~’ plus characters includes +, – and N (which is integer) up to whitespace or a slash.
 
The tilde expansion is used to expand to several specific pathnames:
    Home directories
    Current/previous working directory
    Directories from directory stack.
 
== Home Directories ==
 
Tilde expansion provides a way to expand the home directory of the current user or the home directory of the given user name.
 
== Syntax ==
 
~ Expand to the variable $HOME or home directory of the current user
 
~USER Expand to the home directory of the given username
 
== Example 1. Current Users Home ==
Tilde(~) as a separate word, expands to $HOME if it is defined, if $HOME is not defined, then it expands with the home directory of the current user.
Tilde(~) as a separate word, expands to $HOME if it is defined, if $HOME is not defined, then it expands with the home directory of the current user.
* Now the value of the HOME variable is /home/oracle so cd ~ changed the current directory to the value of $HOME.
* Now the value of the HOME variable is /home/oracle so cd ~ changed the current directory to the value of $HOME.
Zeile 112: Zeile 47:
  [tmp]$ pwd
  [tmp]$ pwd
  /tmp
  /tmp
 
  [tmp]$ echo $HOME  
  [tmp]$ echo $HOME  
  /home/oracle
  /home/oracle
 
  [tmp]$ cd ~
  [tmp]$ cd ~
 
  [~]$ pwd
  [~]$ pwd
  /home/oracle
  /home/oracle


HOME is changed to /sbin, and cd ~ uses only $HOME not the home directory of the user. After unset the value of $HOME, cd ~ changed the directory to the value of the home directory set for the oracle user in /etc/passwd. For Tilde expansion, HOME overrides the real home directory.
HOME is changed to /sbin, and cd ~ uses only $HOME not the home directory of the user.  
* After unset the value of $HOME, cd ~ changed the directory to the value of the home directory set for the oracle user in /etc/passwd.  
* For Tilde expansion, HOME overrides the real home directory.


[~]$ export HOME=/sbin
[~]$ export HOME=/sbin
Zeile 137: Zeile 74:
/home/oracle
/home/oracle


== Example 2. Home directory of the given user ==
=== Home directory of the given user ===
The following script takes the backup of a log file that has the current date in the name. It also logs the starting time and end time into the file called backup.log in the home directory of the oracle user.
The following script takes the backup of a log file that has the current date in the name.  
* It also logs the starting time and end time into the file called backup.log in the home directory of the oracle user.


  #! /bin/bash
  #! /bin/bash
Zeile 153: Zeile 91:
  -rw-r--r-- 1 root  root      99 Jun  4 14:23 backup.log
  -rw-r--r-- 1 root  root      99 Jun  4 14:23 backup.log


If the given user name does not exist then it doesn’t expand to something. In the following example, there is no user called ora. So, ~ora will not expand to /home/ora.
If the given user name does not exist then it doesn’t expand to something.  
* In the following example, there is no user called ora.  
* So, ~ora will not expand to /home/ora.
  $ echo ~ora
  $ echo ~ora
  ~ora
  ~ora


Refer to our earlier article to understand how to perform brace expansion in bash. i.e how to use { } in bash.
Refer to our earlier article to understand how to perform brace expansion in bash.  
* i.e how to use { } in bash.
Working Directories
Working Directories


Tilde with + and – are used for representing the working directories.
Tilde with + and – are used for representing the working directories.
     ~+ expands to the value of the PWD variable which holds the current working directory.
     ~+ expands to the value of the PWD variable which holds the current working directory.
     ~- expands to the value of OLDPWD variable, which holds the previous working directory. If OLDPWD is unset, ~- is not expanded.
     ~- expands to the value of OLDPWD variable, which holds the previous working directory.  
* If OLDPWD is unset, ~- is not expanded.


== Example 3. Expansion of old/current working directories ==
=== Expansion of old/current working directories ===
The following example will compare the file in the current directory and previous working directory.
The following example will compare the file in the current directory and previous working directory.
  $ cat comp.sh
  $ cat comp.sh
Zeile 202: Zeile 144:
This article is part of the on-going Bash Tutorial series.
This article is part of the on-going Bash Tutorial series.


== Expansion for Directories in Stack ==
==== Expansion for Directories in Stack ====


Each bash process contains a stack object that can be used to keep track of directories a script did visit while it is processing data of directory contents.
Each bash process contains a stack object that can be used to keep track of directories a script did visit while it is processing data of directory contents.


It is a very simple mechanism to be able to reference directories or to change back to directories one did visit before. Tilde expansion also provides expansion to the directories in the directory stack.
It is a very simple mechanism to be able to reference directories or to change back to directories one did visit before.  
* Tilde expansion also provides expansion to the directories in the directory stack.


     ~+N Expands the Nth directory in the directory stack (counting from the left of the list printed by dirs when invoked without options), starting with zero.
     ~+N Expands the Nth directory in the directory stack (counting from the left of the list printed by dirs when invoked without options), starting with zero.
Zeile 213: Zeile 156:
Review our earlier article to understand how to use dirs, pushd and popd commands to manipulate directory stack.
Review our earlier article to understand how to use dirs, pushd and popd commands to manipulate directory stack.


== Example 4. Displays Nth directory from left using ~+ ==
=== Displays Nth directory from left using ~+ ===


In the following example, directory stack has 4 directories. ~+2 gives you the directory path available in the second position from left starting with zero.
In the following example, directory stack has 4 directories. ~+2 gives you the directory path available in the second position from left starting with zero.
Zeile 228: Zeile 171:
  /var/opt/GG/bin
  /var/opt/GG/bin


But top of the stack (zero position) will always have the current directory. So after the above execution, following is shown in the directory stack.
But top of the stack (zero position) will always have the current directory.  
* So after the above execution, following is shown in the directory stack.


  $  dirs -v
  $  dirs -v
Zeile 236: Zeile 180:
  3  /root
  3  /root


== Example 5. Displays Nth directory from right using ~- ==
=== Displays Nth directory from right using ~- ===
Following is similar to the above example. But, will consider the directories from the bottom of the stack because of the ~-.
Following is similar to the above example.  
* But, will consider the directories from the bottom of the stack because of the ~-.
  $ dirs -v
  $ dirs -v
  0  /var/opt/GG/bin
  0  /var/opt/GG/bin
Zeile 254: Zeile 199:
  2  /var/opt/GG/bin
  2  /var/opt/GG/bin
  3  /root
  3  /root
== Aufruf ==
=== Optionen ===
=== Parameter ===
=== Umgebung ===
=== Rückgabewert ===
== Konfiguration ==
=== Dateien ===
== Sicherheit ==
== Dokumentation ==
=== RFC ===
=== Man-Page ===
=== Info-Pages ===
== Siehe auch ==
== Links ==
=== Projekt ===
=== Weblinks ===
[[Kategorie:Bash/Expansionen]]
= TMP =
Die Bash-Shell stellt einige Variablen zur Verfügung, die mit einem vorangestellten '~' (Tilde genannt) versehen sind und als Tilde-Erweiterungen bezeichnet werden.
* Sie sind Synonyme für den Inhalt anderer Variablen innerhalb Ihrer Shell.
* Die Tilde-Expansion ist der Prozess der Umwandlung dieser Abkürzungen in die Verzeichnisnamen, für die sie stehen.
* In diesem Artikel wollen wir uns die Tilde-Expansion anhand von Beispielen ansehen.
* Die Tilde-Expansion gilt für die Zeichen "~" sowie für die Zeichen +, - und N (eine ganze Zahl) bis hin zu Leerzeichen oder einem Schrägstrich.
Die Tilde-Erweiterung wird verwendet, um mehrere spezifische Pfadnamen zu erweitern:
    Home directories
    Current/previous working directory
    Directories from directory stack.
== Home Directories ==
Die Tilde-Expansion bietet eine Möglichkeit, das Heimatverzeichnis des aktuellen Benutzers oder das Heimatverzeichnis des angegebenen Benutzernamens zu expandieren.
== Aufruf ==
~ Expandiert in die Variable $HOME oder das Heimatverzeichnis des aktuellen Benutzers
~USER Erweitert um das Heimatverzeichnis des angegebenen Benutzernamens

Aktuelle Version vom 12. November 2024, 18:42 Uhr

topic - Beschreibung

Beschreibung

Beginnt ein Wert mit einer unmaskierten Tilde (~) versucht die Bash diese zu substituieren.

  • Betrachtet werden alle der Tilde folgenden Zeichen bis zum ersten Schrägstrich (Slash).
  • Ergibt dies eine gültige Benutzerkennung, so expandiert der Ausdruck zum Heimatverzeichnis dieses Benutzers.
  • Folgt der Tilde unmittelbar der Schrägstrich, wird der Ausdruck durch den Inhalt der Variablen HOME ersetzt
  • ist diese nicht gesetzt, wird das Heimatverzeichnis des aktuellen Benutzers angenommen
Beispiel
$ var=~
$ echo $var
$ /home/user
$ var=~root/
$ echo $var
$ /root/
  • Alle Zeichen bis zum ersten nicht in Anführungszeichen gesetzten Schrägstrich (oder alle Zeichen, wenn es keinen nicht in Anführungszeichen gesetzten Schrägstrich gibt) werden als Tilde-Präfix betrachtet.
  • Wenn keines der Zeichen im Tilde-Präfix in Anführungszeichen steht, werden die Zeichen im Tilde-Präfix, die auf die Tilde folgen, als möglicher Anmeldename behandelt.
  • Ist dieser Anmeldename eine Nullzeichenkette, wird die Tilde durch den Wert der Shell-Variablen HOME ersetzt.
  • Wenn HOME nicht gesetzt ist, wird stattdessen das Heimatverzeichnis des Benutzers, der die Shell ausführt, verwendet.
  • Andernfalls wird das Tilde-Präfix durch das Home-Verzeichnis ersetzt, das dem angegebenen Login-Namen zugeordnet ist.
Präfixe
  • Wenn das Tilde-Präfix "~+" ist, ersetzt der Wert der Shell-Variablen PWD das Tilde-Präfix.
  • Ist das Tilde-Präfix "~-", wird der Wert der Shell-Variablen OLDPWD, sofern sie gesetzt ist, ersetzt.

Wenn die Zeichen nach der Tilde im Tilde-Präfix aus einer Zahl N bestehen, der wahlweise ein "+" oder ein "-" vorangestellt ist, wird das Tilde-Präfix durch das entsprechende Element aus dem Verzeichnisstapel ersetzt, wie es von dem mit den Zeichen nach der Tilde im Tilde-Präfix als Argument aufgerufenen dirs built-in angezeigt würde.

  • Wenn der Tilde-Präfix ohne Tilde aus einer Zahl ohne führendes "+" oder "-" besteht, wird "+" angenommen.

Wenn der Anmeldename ungültig ist oder die Tilde-Expansion fehlschlägt, wird das Wort unverändert gelassen.

  • Jede Variablenzuweisung wird auf nicht in Anführungszeichen gesetzte Tilde-Präfixe unmittelbar nach einem ":" oder "=" geprüft.
  • In diesen Fällen wird ebenfalls eine Tilde-Expansion durchgeführt.

Folglich kann man Dateinamen mit Tilden in Zuweisungen an PATH, MAILPATH und CDPATH verwenden, und die Shell weist den erweiterten Wert zu.

Anwendung

$ export PATH="$PATH:~/testdir"

~/testdir wird zu $HOME/testdir erweitert.

Wenn $HOME /home/user ist, wird das Verzeichnis /home/user/testdir der PATH-Variable hinzugefügt.

Current Users Home

Tilde(~) as a separate word, expands to $HOME if it is defined, if $HOME is not defined, then it expands with the home directory of the current user.

  • Now the value of the HOME variable is /home/oracle so cd ~ changed the current directory to the value of $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 is changed to /sbin, and cd ~ uses only $HOME not the home directory of the user.

  • After unset the value of $HOME, cd ~ changed the directory to the value of the home directory set for the oracle user in /etc/passwd.
  • For Tilde expansion, HOME overrides the real home directory.

[~]$ export HOME=/sbin

[oracle]$ cd ~

[~]$ pwd /sbin

[~]$ unset HOME

[sbin]$ cd ~

[oracle]$ pwd /home/oracle

Home directory of the given user

The following script takes the backup of a log file that has the current date in the name.

  • It also logs the starting time and end time into the file called backup.log in the home directory of the oracle user.
#! /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

If the given user name does not exist then it doesn’t expand to something.

  • In the following example, there is no user called ora.
  • So, ~ora will not expand to /home/ora.
$ echo ~ora
~ora

Refer to our earlier article to understand how to perform brace expansion in bash.

  • i.e how to use { } in bash.

Working Directories

Tilde with + and – are used for representing the working directories.

   ~+ expands to the value of the PWD variable which holds the current working directory.
   ~- expands to the value of OLDPWD variable, which holds the previous working directory. 
  • If OLDPWD is unset, ~- is not expanded.

Expansion of old/current working directories

The following example will compare the file in the current directory and previous working directory.

$ 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
$

In the above execution:

   ~+/gg.c expands to /var/opt1/gg/gg.c
   ~-/gg.c expands to /var/opt/gg/gg.c

This article is part of the on-going Bash Tutorial series.

Expansion for Directories in Stack

Each bash process contains a stack object that can be used to keep track of directories a script did visit while it is processing data of directory contents.

It is a very simple mechanism to be able to reference directories or to change back to directories one did visit before.

  • Tilde expansion also provides expansion to the directories in the directory stack.
   ~+N Expands the Nth directory in the directory stack (counting from the left of the list printed by dirs when invoked without options), starting with zero.
   ~-N Expands the Nth directory in the directory stack(counting from the right of the list printed by dirs when invoked without options), starting with zero.

Review our earlier article to understand how to use dirs, pushd and popd commands to manipulate directory stack.

Displays Nth directory from left using ~+

In the following example, directory stack has 4 directories. ~+2 gives you the directory path available in the second position from left starting with zero.

$ dirs -v
0  /sbin
1  /var/opt/midas
2  /var/opt/GG/bin
3  /root
$ cd ~+2
$ pwd
/var/opt/GG/bin

But top of the stack (zero position) will always have the current directory.

  • So after the above execution, following is shown in the directory stack.
$  dirs -v
0  /var/opt/GG/bin
1  /var/opt/midas
2  /var/opt/GG/bin
3  /root

Displays Nth directory from right using ~-

Following is similar to the above example.

  • But, will consider the directories from the bottom of the stack because of the ~-.
$ 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

Aufruf

Optionen

Parameter

Umgebung

Rückgabewert

Konfiguration

Dateien

Sicherheit

Dokumentation

RFC

Man-Page

Info-Pages

Siehe auch

Links

Projekt

Weblinks

TMP

Die Bash-Shell stellt einige Variablen zur Verfügung, die mit einem vorangestellten '~' (Tilde genannt) versehen sind und als Tilde-Erweiterungen bezeichnet werden.

  • Sie sind Synonyme für den Inhalt anderer Variablen innerhalb Ihrer Shell.
  • Die Tilde-Expansion ist der Prozess der Umwandlung dieser Abkürzungen in die Verzeichnisnamen, für die sie stehen.
  • In diesem Artikel wollen wir uns die Tilde-Expansion anhand von Beispielen ansehen.
  • Die Tilde-Expansion gilt für die Zeichen "~" sowie für die Zeichen +, - und N (eine ganze Zahl) bis hin zu Leerzeichen oder einem Schrägstrich.

Die Tilde-Erweiterung wird verwendet, um mehrere spezifische Pfadnamen zu erweitern:

   Home directories
   Current/previous working directory
   Directories from directory stack.

Home Directories

Die Tilde-Expansion bietet eine Möglichkeit, das Heimatverzeichnis des aktuellen Benutzers oder das Heimatverzeichnis des angegebenen Benutzernamens zu expandieren.

Aufruf

~ Expandiert in die Variable $HOME oder das Heimatverzeichnis des aktuellen Benutzers
~USER Erweitert um das Heimatverzeichnis des angegebenen Benutzernamens