
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.
read
ist 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.sh
und 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 cat
sich 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:
complete
wird nicht vom Skript selbst ausgeführt ( script_name.sh
im obigen Beispiel). Erstellen Sie eine separate Datei ( completion_for_script_name.sh
zum 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_profile
oder .bashrc
.