Appeler ls ou moins dans bash en fonction du type de fichier

0

J'effectue souvent accidentellement un fichier sur un fichier, alors que je voulais en faire moins.

Existe-t-il un moyen de créer un alias, ou une fonction, qui exécute ls sur un répertoire et moins sur un fichier.

kmace
la source
Regardez test. -d vérifiera si l'argument est un répertoire, -f pour le fichier. Donc dans un script pourrait avoir quelque chose comme if [-f "$ 1"]; alors moins "$ 1"; elif [-d "$ 1"]; alors ls "$ 1"; Fi . Bien que je sois sûr qu'il y ait des erreurs car je n'utilise pas beaucoup de scripts, ajoutez-les simplement dans un fichier, avec shebang, et rendez les exécutables ..
Guy,

Réponses:

1

La chose de base que vous voulez pourrait ressembler à quelque chose comme ça:

function my_less()
  {
  obj=$1
  shift
  test -d $obj && ls $obj $@
  test -f $obj && less $obj $@
  }

ensuite

my_less thing

fera un lsou un lessselon le type.

Le obj=$1saisit le premier argument de la fonction. Les shiftchangements les arguments restants « à gauche » et $@est la liste des arguments en cours.

Si vous voulez avoir un traitement rudimentaire des commutateurs, vous pouvez étendre cette fonction comme ceci:

function my_less()
  {
  switches=
  obj=
  while true
  do
    case $1 in
      -*)
        switches="$switches $1"
        shift
        ;;
      *)
        obj=$1
        shift
        break
        ;;
    esac
  done
  test -d $obj && ls $switches $obj $@
  test -f $obj && less $switches $obj $@
}

Cela collectera tous les principaux commutateurs et définira objle premier non-commutateur. Cela fera souvent la mauvaise chose, mais il ne s'agit que d'une suggestion pour la prochaine étape.

Greg Tarsa
la source