GNU/Linux >> Znalost Linux >  >> Linux

Jak poznám název souboru skriptu ve skriptu Bash?

S bash>=3 následující práce:

$ ./s
0 is: ./s
BASH_SOURCE is: ./s
$ . ./s
0 is: bash
BASH_SOURCE is: ./s

$ cat s
#!/bin/bash

printf '$0 is: %s\n$BASH_SOURCE is: %s\n' "$0" "$BASH_SOURCE"

# ------------- SCRIPT ------------- #

#!/bin/bash

echo
echo "# arguments called with ---->  ${@}     "
echo "# \$1 ---------------------->  $1       "
echo "# \$2 ---------------------->  $2       "
echo "# path to me --------------->  ${0}     "
echo "# parent path -------------->  ${0%/*}  "
echo "# my name ------------------>  ${0##*/} "
echo
exit

# ------------- CALLED ------------- #

# Notice on the next line, the first argument is called within double, 
# and single quotes, since it contains two words

$  /misc/shell_scripts/check_root/show_parms.sh "'hello there'" "'william'"

# ------------- RESULTS ------------- #

# arguments called with --->  'hello there' 'william'
# $1 ---------------------->  'hello there'
# $2 ---------------------->  'william'
# path to me -------------->  /misc/shell_scripts/check_root/show_parms.sh
# parent path ------------->  /misc/shell_scripts/check_root
# my name ----------------->  show_parms.sh

# ------------- END ------------- #

$BASH_SOURCE dává správnou odpověď při získávání skriptu.

To však zahrnuje cestu, takže pro získání pouze názvu souboru skriptů použijte:

$(basename $BASH_SOURCE) 

me=`basename "$0"`

Pro čtení pomocí symbolického odkazu, který obvykle není to, co chcete (obvykle nechcete uživatele tímto způsobem zmást), zkuste:

me="$(basename "$(test -L "$0" && readlink "$0" || echo "$0")")"

IMO, to bude mít matoucí výstup. "Spustil jsem foo.sh, ale je tam napsáno, že běžím bar.sh!? Musí to být chyba!" Kromě toho je jedním z účelů odlišně pojmenovaných symbolických odkazů poskytovat různé funkce na základě názvu, který se nazývá (na některých platformách například gzip a gunzip).

Tedy vyřešit symbolické odkazy tak, že když uživatel spustí foo.sh což je ve skutečnosti symbolický odkaz na bar.sh , chcete použít přeložený název bar.sh spíše než foo.sh .


Linux
  1. Jak zkontrolovat podřetězec v Shell Script Bash?

  2. Jak zajistit, aby příkaz alias fungoval ve skriptu bash nebo souboru bashrc

  3. Bash skript pro odstranění nejstaršího souboru ze složky

  1. Jak vytvořit Bash skript pro změnu formátu data v souboru CSV?

  2. Jak může bash skript znát adresář, ve kterém je nainstalován, když je zdrojem . operátor?

  3. Jak zvýraznit Bash skripty ve Vimu?

  1. Jak nahradit mezery v názvech souborů pomocí bash skriptu

  2. Jak zahrnout soubor do skriptu bash shell

  3. Jak získám absolutní adresář souboru v bash?