Übergeben Sie den Dateinamen an Skripte mit Autovervollständigungsfunktion

Übergeben Sie den Dateinamen an Skripte mit Autovervollständigungsfunktion

Wenn ich Dateinamen in einem Skript verwende, erwähne ich diese normalerweise explizit im Skript, zum Beispiel wie unten gezeigt:

#!/bin/bash ... echo "<dynamic text>" >> process_log.log ...

Ich habe mich gefragt, ob es möglich ist, dem Skript den Dateinamen wie folgt zu übergeben:

./script_name.sh file_1 file_2 file_3

mit Tab-Autovervollständigungsfunktion. (Das wäre sehr praktisch!)

Hat jemand Erfahrung damit? Danke.


readist eine Möglichkeit, einige Eingabedaten abzufragen, aber ich halte es bei mehreren Eingaben und langen Texten für umständlich.

Antwort1

OK, dieses Skript verwendet ein obligatorisches Argument und zwei optionale Argumente. Es wird (mit einem Fehler) beendet, wenn Sie nicht mindestens ein Argument angeben. Ansonsten macht es nicht viel!

#!/bin/sh
if [ -z "$1" ]
then
    echo "Missing filename: 1"
    exit 1
else
    file1=$1
fi
file2="$2"
file3="$3"
printf "File 1: %s\n" "$file1"
printf "File 2: %s\n" "$file2"
printf "File 3: %s\n" "$file3"
cat "$file1"

Speichern Sie es beispielsweise unter folgendem Namen script_name.shund legen Sie es als ausführbare Datei fest:

chmod u+x script_name.sh

Führen Sie es dann wie folgt aus:

./script_name.sh script_name.sh script_name.sh script_name.sh

Es sollte die drei Argumente anzeigen, die Sie übergeben haben (die alle „script_name.sh“ sind), und dann catsich selbst.

Als ich das ausprobiert habe, habe ich mit der Tab-Vervollständigung experimentiert – sie hat automatisch gut funktioniert (Dateien und Verzeichnisse wurden angezeigt, wenn ich gedrückt habe Tab). Ich habe nichts unternommen, um dies zu bewirken. Wenn Sie Ihr Skript jedoch nur mit bestimmten Dateien arbeiten lassen möchten complete -f -X '!*.png' script_name.sh, werden nur „.png“-Dateien angezeigt, wenn Sie gedrückt haben Tab.

Bearbeiten, um hinzuzufügen:

completewird nicht vom Skript selbst ausgeführt ( script_name.shim obigen Beispiel). Erstellen Sie eine separate Datei ( completion_for_script_name.shzum Beispiel ):

complete -f -X '!*.png' script_name.sh

Verwenden Sie source, um die Vervollständigung in die aktuelle Umgebung zu laden:

source ./completion_for_script_name.sh

Normalerweise tun Sie dies im Profil Ihrer Shell, z. B. .bash_profileoder .bashrc.

verwandte Informationen