Wie kann ich eine Kommandozeile (unix/linux) - Anweisung, die verwendet Variablen zu führen zahlreiche Befehle?

StackOverflow https://stackoverflow.com/questions/74886

  •  09-06-2019
  •  | 
  •  

Frage

Ich umstellen müssen einige der Inhalte in verschiedene Verzeichnisse, aber es ist ein bisschen ein Schmerz.Um die Anwendung zu Debuggen, die ich arbeite (eine ruby-app), die ich brauche, um meine Edelsteine in mein Edelstein-Ordner ein zu einer Zeit (lange Geschichte;überblick:eine ist gebrochen und ich kann nicht herausfinden, welche).

Also muss ich etwas tun wie:

sudo mv backup/gem/foo gem/
sudo mv backup/doc/foo doc/
sudo mv backup/specification/foo.gemspec specification/

ersetzen Sie "foo" jedes mal.Wie kann ich Autor, ein einfaches shell-Skript, lassen Sie mich etwas tun wie:gemMove("foo") und füllen Sie die Lücken für mich?

War es hilfreich?

Lösung

legen Sie Folgendes in eine Datei namens gemmove:

#!/bin/bash

foo=$1

if [ x$foo == x ]; then
  echo "Must have an arg"
  exit 1
fi

for d in gem doc specification ; do 
  mv backup/$d/$1 $d
done

dann tun

chmod a+x gemmove

und rufen Sie dann "sudo gemmove foo' zu bewegen, die foo Edelstein aus der backup-Verzeichnisse in the real ones

Andere Tipps

Sie könnte verwenden Sie einfach die bash-shell-Argumente wie diese:

#!/bin/bash
# This is move.sh
mv backup/gem/$1 gem/
mv backup/doc/$1 doc/
# ...

und dann führen Sie es aus als:

sudo ./move.sh foo

Werden Sie sicher, dass das Skript ausführbar mit

chmod +x move.sh

in der bash, so etwas wie:

function gemMove()
{
filename=$1
   mv backup/gem/$filename gem/$filename
   mv backup/doc/$filename doc/$filename
   mv backup/specification/$filename.spec specification
}

dann können Sie einfach anrufen gemMove("foo") an anderer Stelle im Skript.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top