Une place pour une véritable innovation. Partagez vos propres utilitaires créés avec la communauté Manjaro.
Questions et discussions sur la programmation et le codage.
Répondre

Les alias de votre .bashrc ou assimilé

#1Messageil y a 8 ans

Le but de ce sujet est, vous l'avez deviné, tout simplement de regrouper différents alias utiles à caser dans votre echo .$(basename $SHELL)rc (.bashrc, .zshrc etc.).

Pour ceux qui ne saurait pas ce qu'est un alias, voici un excellent post d'ewolnux récapitulant la chose : viewtopic.php?f=10&t=3512&p=41095&hilit=alias#p41095

Ceci étant dit, passons aux choses sérieuses :
- Pour utiliser less en commencant par la fin d'un fichier :

alias rless="less +G"

- Recherche d'un processus :

alias pss="ps -e | grep -i"

- Suppression du fichier d'historique et de l'historique du terminal courant :

alias history-clean=">$HISTFILE && history -c"

- Recherche d'une commande (incluant les alias et les fonctions du .bashrc) :

alias search-cmd="compgen -A function -abck | sort -u | grep"

- Suppression des thumbnails/vignettes de nautilus :

alias clean-thumbnails="rm -rf ~/.cache/thumbnails"

- Mise à jour de grub :

alias update-grub="sudo grub-mkconfig -o /boot/grub/grub.cfg"


Pour les utilisateurs de bumblebee :
- Affiche le statut de la carte graphique discrete (ON/OFF) :

alias nvidia-status="cat /proc/acpi/bbswitch"

- Arrete manuellement la carte graphique discrète si elle n'est plus utilisée :

alias nvidia-down="sudo modprobe -r nvidia_modeset nvidia && sudo tee /proc/acpi/bbswitch <<<OFF"


Et enfin l'indispensable alias de Papajoke :

alias qui='curl -s $(echo -e "\x77\x77\x77\x2E\x6D\x61\x6E\x6A\x61\x72\x6F\x2E\x66\x72\x2F\x66\x6F\x72\x75\x6D\x2F\x69\x6E\x64\x65\x78\x2E\x70\x68\x70\x0A") | grep -oEi "\) inscrit\((.*)" | sed "s|<[^>]*>||g" | cut -d":" -f 2 | sed  "s|,|\n|g" | grep -v "Bot" | sort -f'


Aller, c'est à votre tour maintenant !
Dernière modification par N3mesis98il y a 8 ans, modifié au total 1 fois.

Les alias de votre .bashrc ou assimilé

#2Messageil y a 8 ans

- afficher/retrouver mon ip

ipp = 'curl ipecho.net/plain'


- chroot avec systemd :

alias chrooty='stat -c "%n" /run/media/$(whoami)/* 2>/dev/null; echo -n "Dossier à monter? (ex: /run/media/$(whoami)/????) "; read rep; [ -d "$rep" ] && sudo systemd-nspawn -D $rep || echo "Dossier ($rep) invalide"'


plus le temps passe et moins j'ai d'alias car j'ai l'habitude d'afficher la commande, comme cela ou bout de 377 lancements elle finit par rentrer :siffle par exemple : alias rless='echo "less +G"; less +G'

-----------------------------------------------

N3mesis98 a écrit :- Recherche d'une commande (incluant les alias et les fonctions du .bashrc) :

alias search-cmd="compgen -A function -abck | uniq | grep"

sous zsh pas de compgen :pleure:
donc c'est plutôt du bricolage :

alias search-cmd="(alias | cut -f1 -d= ; hash -f; hash -v | cut -f 1 -d= ; typeset +f) | grep -v ^_ | sort | grep -i"

Les alias de votre .bashrc ou assimilé

#3Messageil y a 8 ans

Je ne suis pas un grand connaisseur de zsh, mais j'ai trouvé ceci : http://www.zsh.org/mla/users/2008/msg00614.html
Peut être que ça peut aider...

EDIT:
J'ai réussi à faire cette commande qui marche pour les alias, les fonctions et les commandes externes :

(typeset -F | cut -c12- ; alias | cut -c7- | cut -f 1 -d= ; ls $(echo $PATH | tr : \ )) | grep

Normalement elle devrait fonctionner avec zsh comme avec bash.
Reste à trouver comment lister de manière générique les commandes de type builtin...

Les alias de votre .bashrc ou assimilé

#4Messageil y a 8 ans

sinon j'ai pas mal d'ovnis très perso mais ce sont des fonctions

- possibilité d'utiliser la commande ln sans aucun paramètres, alors dans ce cas la fonction devient interactive et j'ai pas a me poser des questions sur les paramètres

function _ln(){
   if [ -n "$1" ]; then
      command -p ln $@
   else
      echo -n "Nom du dossier/fichier source existant: "; read source
      if [[ -f "$source" || -d "$source" ]]; then
         echo -n "Nom du lien vers ce fichier: "; read lien
         echo "ln -s $source $lien"
         command -p ln -s $source $lien
      else
         echo "erreur fichier inexistant !"
      fi
   fi
}
alias ln="_ln"


- une fonction KDE open qui ouvre un sélecteur de fichier graphique puis lance l'éditeur passé en option.
Oui, on passe en paramètre l'éditeur et non le nom de fichier (open cat, open nano ...) :rire

function open(){
# usage: open nom_editeur /home/Documents/
# utilise extra/kdebase-kdialog
    command="$1"
    [ -z "${command}" ] && command="kate"
    repertoire="$2"
    if [[ ! -d "${repertoire}" ]] ; then
        #echo "dossier ${repertoire} non trouvé"
        repertoire=$(pwd)
    fi
    fichier=$(kdialog --getopenfilename ${repertoire} '*.* |tous fichiers' 2>/dev/null)
    [ -f "${fichier}" ] && "${command}" "${fichier}"
}


-------------------------
ma commande search-cmd fonctionne bien sous zsh ! j'ai pensé bricolage à coté de compgen :clindoeil:
ps: ta commande passe pas car elle affiche aussi des dossiers (/usr/local/bin:,/usr/bin/vendor_perl:,...) et le tout sur plusieurs colonnes, pas bon pour le grep :confus:
je dois tout avoir ? (alias | cut -f1 -d= ; hash -f; hash -v | cut -f 1 -d= ; typeset +f) | grep -v ^_ | uniq | sort |wc -lme retourne 3913
Dernière modification par papajokeil y a 8 ans, modifié au total 2 fois.

Les alias de votre .bashrc ou assimilé

#5Messageil y a 8 ans

:bjr:

N3mesis98 a écrit :- Mise à jour de grub :

alias update-grub="sudo grub-mkconfig -o /boot/grub/grub.cfg"



Perso je ne vois pas pourquoi tu fais un alias d'une commande qui est déjà implémentée sous Manjaro ( peut être pour arch ?)

Les alias de votre .bashrc ou assimilé

#6Messageil y a 8 ans

En effet, l'alias update-grub n'est pas présent sous arch par défaut...

Sous bash je n'ai pas d'options -f et -v pour hash, donc ça n'est malheuresement pas rétrocompatible.
Pour savoir si tu intègre bien les commandes builtins dans ta commande, essaye de faire un grep sur "cd".
Vu que c'est une commande builtin (type cd pour en avoir la confirmation), elle n’apparaîtra pas si tu ne prends en compte que les commandes externes (localisées dans les dossier de $PATH).

Par contre tu as raison pour les dossiers dans ma commande.
Du coup il faudrait rajouter un filtre supplémentaire :

(typeset -F | cut -c12- ; alias | cut -c7- | cut -f 1 -d= ; ls $(echo $PATH | tr : \ ) | grep -v /) | grep

Pour un grep sur "usr" on passe donc de :

/usr/sbin@
/usr/bin:
primusrun*
/usr/local/bin:
/usr/local/sbin:

À :

primusrun*

Pour ton autre question, non, ça ne pose aucun problème pour grep que ls donne plusieurs fichiers par ligne.
Pourquoi ? Ça je n'en ai pas la moindre idée...

Les alias de votre .bashrc ou assimilé

#7Messageil y a 8 ans

sous archlinux, j'ai aussi un alias façon manjaro :

pacman-mirrors = 'sudo reflector --verbose -l 4 -p http --sort rate --threads 1 --save /etc/pacman.d/mirrorlist'


@N3mesis98
avec ton alias j'ai que 3860 commandes :clindoeil: et en effet il manque les commandes internes (cd,declare,type...) comme mon alias; ça va ce ne sont pas celles que je recherche habituellement.
Dernière modification par papajokeil y a 8 ans, modifié au total 1 fois.

Les alias de votre .bashrc ou assimilé

#8Messageil y a 8 ans

N3mesis98 a écrit :Je ne suis pas un grand connaisseur de zsh, mais j'ai trouvé ceci : http://www.zsh.org/mla/users/2008/msg00614.html
Peut être que ça peut aider...

EDIT:
J'ai réussi à faire cette commande qui marche pour les alias, les fonctions et les commandes externes :

(typeset -F | cut -c12- ; alias | cut -c7- | cut -f 1 -d= ; ls $(echo $PATH | tr : \ )) | grep

Normalement elle devrait fonctionner avec zsh comme avec bash.
Reste à trouver comment lister de manière générique les commandes de type builtin...

Marche pas sous fish ! :gsourire:

En parlant de fish, je ne définis pas d’alias mais des fonctions, ce qui revient au même mais permet de faire des choses plus complexes. Quelques exemples :

function ls --description 'List contents of directory'
        set -l param -N --color=auto --group-directories-first --ignore=lost+found
        if isatty 1
                set param $param --indicator-style=classify
        end
        command ls $param $argv
end

function pacmanhisto
        cat /var/log/pacman.log | sift "ALPM" | sift $argv #sift → un grep boosté aux hormones : https://sift-tool.org
end

function trsfr --description 'Traduit n’importe quoi en français en utilisant l’API Google → http://www.soimort.org/translate-shell/'
        trans -b -t fr $argv
end

Les alias de votre .bashrc ou assimilé

#9Messageil y a 8 ans

papajoke a écrit :@N3mesis98
avec ton alias j'ai que 3860 commandes :clindoeil:

D'après ce que j'en ai compris, ta commande ne prends pas non plus en compte les commandes builtins.
Du coup ça pourrait être intéressant de comparer les résultats des deux commandes voir si les différences ne sont pas des faux positifs ou autre...
Ça doit pouvoir se faire avec un sort -u et en analysant les résultat avec un diff.

Les alias de votre .bashrc ou assimilé

#10Messageil y a 8 ans

et voila pour fish
ma fonction ff correspondante a ce que nous avons avec manjaro :

function ff --description 'recherche de fichiers par nom dans répertoire courant'

   echo -e "recherche de fichiers par nom dans répertoire courant \n"
   if test (count $argv) -lt 2
      set rep '.'
   else
      set rep $argv[2]
   end
   set -l file $argv[1]
   echo -e "params: 'nom_fichier_a_rechercher'\t [directory]"
   echo -e "find $rep -type f -iname '*$file*' -exec ls -l --color '{}' \;
   \n--------------------------------------------"
   
   if test (count $argv) -lt 1
      echo "Erreur: Pas de paramètres"
      return 127
   end
   
   find $rep -type f -iname "*$file*" -exec ls -l --color '{}' \;
   #find $rep -type f -iname "*$file*" | xargs stat -c "(%a %U) %n"
end


-------------------------------

fish utilise le dossier ~/.config/fish
du coup j'ai réutilisé cette bonne structure pour mes alias et fonctions avec bash et zsh
dans mon .bashrc j'ai à la fin :

#modele d'insersion de configurations dans .bashrc
for fileinc in $HOME/.config/${SHELL#/bin/}/{alias,plugins}.inc; do
        [ -r "$fileinc" ] && .  "$fileinc"
done
unset fileinc

bash (et zsh) va donc insérer automatiquement les 2 fichiers
~/.config/bash/alias.inc
~/.config/bash/plugins.inc

Les alias de votre .bashrc ou assimilé

#11Messageil y a 8 ans

autre fonctionnalité dans le bashrc (ou zshrc) , la fonction command_not_found_handle (), elle est déclenchée lorsque qu'une commande n'est pas trouvée en console. Il est donc possible de personnaliser l'erreur
ps: pour zsh et fish, c'est command_not_found_handler() !!!

ici, je me fais "aussi" des alias, par exemple :

command_not_found_handle () {
    local cmd="$1"
    case "$cmd" in
      bashrc)     $EDITOR $HOME/.bashrc; return 0;;
      php.ini)    sudo $EDITOR /etc/php/conf.d/$cmd; return 0;;
      *)          [ -f "/etc/$cmd" ] && { sudo $EDITOR /etc/$cmd; return 0; }
    esac
    printf "bash: %s:\033[1m\033[31m commande non trouvée\033[0m\n" "$cmd" >&2
    return 127
}
des raccourcis pour éditer les fichiers de configuration.
ici, la grosse différence avec les alias c'est que la fonction est exécutée que si la commande n'est pas disponible alors que l'alias lui est exécuté même si la commande existe, il passe même avant la commande.

--------------------------------

autre personnalisation pacman 5, si la commande n'est pas trouvée, je recherche si elle n'est pas disponible dans un paquet non installé :

command_not_found_handle () {
    local cmd="$1" packages=()
    case "$cmd" in
      bashrc)     $EDITOR $HOME/.bashrc; return 0;;
      php.ini)    sudo $EDITOR /etc/php/conf.d/$cmd; return 0;;
      *)          [ -f "/etc/$cmd" ] && { sudo $EDITOR /etc/$cmd; return 0; }
    esac
    printf "bash: %s:\033[1m\033[31m commande non trouvée\033[0m\n" "$cmd" >&2
    packages=($(pacman -Fsq "$cmd" 2>/dev/null))
    [ -n "${packages}" ] && echo -e "-- commande sans doute dans un paquet non installé :\n${packages[*]}"
    return 127
}

Attention pour l'instant (plus tard, jamais ????) manjaro ne gère pas l'option -F de pacman 5 :cartonrouge: donc ne fonctionne qu'avec archlinux !

Les alias de votre .bashrc ou assimilé

#12Messageil y a 8 ans

La dernière petite fonction en date dans mon .bashrc :

function nano() {
   local cmd="/usr/bin/nano"
   local sudo="0"
   while [ -n "$1" ]; do
      cmd="$cmd $1"
      if [ "0" = "$sudo" ] && [ -e "$1" ]; then
         local owner=$(stat -c "%U" "$1")
         if [ "root" = "$owner" ]; then
            sudo="1"
            cmd="sudo $cmd"
         fi
      fi
      shift
   done
   eval $cmd
}

Permet d’exécuter automatiquement nano avec sudo si on veut éditer un fichier dont le propriétaire est root.
Dernière modification par N3mesis98il y a 8 ans, modifié au total 1 fois.

Les alias de votre .bashrc ou assimilé

#13Messageil y a 8 ans

merci de l'idée :gsourire: génial, combien de fois au moment d'enregistrer je me rends compte que j'ai oublié le sudo :pleure:
le ls et la regex c'est un peu compliqué, je me suis permis de me la réécrire plus light
et de plus, ici il est possible de passer des options comme -m par exemple

nano() {
   local cmd='' fichier
   for fichier in "$@"; do
        #stat -c "%g %G %n" "$fichier" # mon petit debug ;)
        if [[ "$(stat -c "%g" "$fichier" 2>/dev/null)" == "0" ]]; then
            cmd='sudo'
            break
        fi
   done
   $cmd /usr/bin/nano -c "$@"
}

adoptée

@lemust83
c'est surtout que je dois faire un copier (tout) - quitter - revenir avec sudo puis me positionner(ou effacer) et coller
Dernière modification par papajokeil y a 8 ans, modifié au total 1 fois.

Les alias de votre .bashrc ou assimilé

#14Messageil y a 8 ans

Belle fonction() :bien
papajoke a écrit :combien de fois au moment d'enregistrer je me rends compte que j'ai oublié le sudo :pleure:

Dans ce cas, je fais un simple sudo !!:clindoeil:

Les alias de votre .bashrc ou assimilé

#15Messageil y a 8 ans

Mise à jour de la fonction pour récupérer le propriétaire via stat -c %U plutôt qu'avec un ls+sed et pour rajouter un local manquant.
Sinon j'ai essayé de prendre le meilleur des deux versions de la fonction pour avoir ceci :

function nano() {
   local cmd="$(which nano) $@"
   local arg
   for arg in "$@"; do
      if [ -e "$arg" ] && [ "root" = $(stat -c "%U" "$arg") ]; then
         cmd="sudo $cmd"
         break
      fi
   done
   eval $cmd
}

Avantages :
- toutes les variables sont locales, donc pas moyen d'interférer avec d'autres fonctions etc.
- on récupère l'emplacement de nano via which pour plus de flexibilité.
- on teste l'existence des fichiers avant d'utiliser stat plutôt que de rediriger les erreur de ce dernier vers /dev/null (plus propre à mon goût).
- comme dans la version de Papajoke, on arrête la boucle dès qu'on a trouvé au moins un fichier appartenant au root.

Sinon, plutôt que de mettre des options pour nano dans ton .bashrc, je te conseil de créer un .nanorc regroupant toutes les options.
J'avais récupéré celui ci je ne sais plus trop sur quel site :

## Sample initialization file for GNU nano.
##
## Please note that you must have configured nano with --enable-nanorc
## for this file to be read!  Also note that this file should not be in
## DOS or Mac format, and that characters specially interpreted by the
## shell should not be escaped here.
##
## To make sure a value is disabled, use "unset <option>".
##
## For the options that take parameters, the default value is given.
## Other options are unset by default.
##
## Quotes inside string parameters don't have to be escaped with
## backslashes.  The last double quote in the string will be treated as
## its end.  For example, for the "brackets" option, ""')>]}" will match
## ", ', ), >, ], and }.

## Use auto-indentation.
set autoindent

## Backup files to filename~.
# set backup

## The directory to put unique backup files in.
# set backupdir ""

## Do backwards searches by default.
# set backwards

## Use bold text instead of reverse video text.
# set boldtext

## The characters treated as closing brackets when justifying
## paragraphs.  They cannot contain blank characters.  Only closing
## punctuation, optionally followed by closing brackets, can end
## sentences.
##
set brackets ""')>]}"

## Do case sensitive searches by default.
# set casesensitive

## Constantly display the cursor position in the statusbar.  Note that
## this overrides "quickblank".
set const

## Use cut to end of line by default.
# set cut

## Set the line length for wrapping text and justifying paragraphs.
## If fill is 0 or less, the line length will be the screen width less
## this number.
##
# set fill -8

## Enable ~/.nano_history for saving and reading search/replace strings.
set historylog

## The opening and closing brackets that can be found by bracket
## searches.  They cannot contain blank characters.  The former set must
## come before the latter set, and both must be in the same order.
##
set matchbrackets "(<[{)>]}"

## Use the blank line below the titlebar as extra editing space.
# set morespace

## Enable mouse support, if available for your system.  When enabled,
## mouse clicks can be used to place the cursor, set the mark (with a
## double click), and execute shortcuts.  The mouse will work in the X
## Window System, and on the console when gpm is running.
##
set mouse

## Allow multiple file buffers (inserting a file will put it into a
## separate buffer).  You must have configured with --enable-multibuffer
## for this to work.
##
# set multibuffer

## Don't convert files from DOS/Mac format.
# set noconvert

## Don't follow symlinks when writing files.
# set nofollow

## Don't display the helpful shortcut lists at the bottom of the screen.
# set nohelp

## Don't add newlines to the ends of files.
# set nonewlines

## Don't wrap text at all.
set nowrap

## Set operating directory.  nano will not read or write files outside
## this directory and its subdirectories.  Also, the current directory
## is changed to here, so any files are inserted from this dir.  A blank
## string means the operating directory feature is turned off.
##
# set operatingdir ""

## Preserve the XON and XOFF keys (^Q and ^S).
# set preserve

## The characters treated as closing punctuation when justifying
## paragraphs.  They cannot contain blank characters.  Only closing
## punctuation, optionally followed by closing brackets, can end
## sentences.
##
# set punct "!.?"

## Do quick statusbar blanking.  Statusbar messages will disappear after
## 1 keystroke instead of 26.  Note that "const" overrides this.
##
# set quickblank

## The email-quote string, used to justify email-quoted paragraphs.
## This is an extended regular expression if your system supports them,
## otherwise a literal string.  Default:
# set quotestr "^([    ]*[#:>\|}])+"
## if you have extended regular expression support, otherwise:
# set quotestr "> "

## Fix Backspace/Delete confusion problem.
# set rebinddelete

## Fix numeric keypad key confusion problem.
# set rebindkeypad

## Do extended regular expression searches by default.
set regexp

## Make the Home key smarter.  When Home is pressed anywhere but at the
## very beginning of non-whitespace characters on a line, the cursor
## will jump to that beginning (either forwards or backwards).  If the
## cursor is already at that position, it will jump to the true
## beginning of the line.
# set smarthome

## Use smooth scrolling as the default.
# set smooth

## Use this spelling checker instead of the internal one.  This option
## does not properly have a default value.
##
# set speller "aspell -x -c"

## Allow nano to be suspended.
set suspend

## Use this tab size instead of the default; it must be greater than 0.
set tabsize 4

## Convert typed tabs to spaces.
# set tabstospaces

## Save automatically on exit, don't prompt.
# set tempfile

## Disallow file modification.  Why would you want this in an rcfile? ;)
# set view

## The two single-column characters used to display the first characters
## of tabs and spaces.  187 in ISO 8859-1 (0000BB in Unicode) and 183 in
## ISO-8859-1 (0000B7 in Unicode) seem to be good values for these.
set whitespace ". "

## Detect word boundaries more accurately by treating punctuation
## characters as parts of words.
set wordbounds

## Enable the new (EXPERIMENTAL) generic undo code, not just for line cuts
# set undo

## Enable soft line wrapping (AKA full line display)
# set softwrap


## Color setup
##
## Format:
##
## syntax "short description" ["filename regex" ...]
##
## The "none" syntax is reserved; specifying it on the command line is
## the same as not having a syntax at all.  The "default" syntax is
## special: it takes no filename regexes, and applies to files that
## don't match any other syntax's filename regexes.
##
## color foreground,background "regex" ["regex"...]
## or
## icolor foreground,background "regex" ["regex"...]
##
## "color" will do case sensitive matches, while "icolor" will do case
## insensitive matches.
##
## Valid colors: white, black, red, blue, green, yellow, magenta, cyan.
## For foreground colors, you may use the prefix "bright" to get a
## stronger highlight.
##
## To use multi-line regexes, use the start="regex" end="regex"
## [start="regex" end="regex"...] format.
##
## If your system supports transparency, not specifying a background
## color will use a transparent color.  If you don't want this, be sure
## to set the background color to black or white.
##
## If you wish, you may put your syntaxes in separate files.  You can
## make use of such files (which can only include "syntax", "color", and
## "icolor" commands) as follows:
##
## include "/path/to/syntax_file.nanorc"
##
## Unless otherwise noted, the name of the syntax file (without the
## ".nanorc" extension) should be the same as the "short description"
## name inside that file.  These names are kept fairly short to make
## them easier to remember and faster to type using nano's -Y option.
##
## All regexes should be extended regular expressions.

## Key bindings
## Please see nanorc(5) for more details on this
##
## Here are some samples to get you going
##
# bind M-W nowrap main
# bind M-A casesens search
# bind ^S research main

## Set this if your backspace key sends delete most of the time (2.1.3+)
# bind kdel backspace all


## Nanorc files
include "/usr/share/nano/nanorc.nanorc"

## C/C++
include "/usr/share/nano/c.nanorc"

## Cascading Style Sheets
include "/usr/share/nano/css.nanorc"

## Debian files
include "/usr/share/nano/debian.nanorc"

## Gentoo files
include "/usr/share/nano/gentoo.nanorc"

## HTML
include "/usr/share/nano/html.nanorc"

## PHP
include "/usr/share/nano/php.nanorc"

## TCL
include "/usr/share/nano/tcl.nanorc"

## TeX
include "/usr/share/nano/tex.nanorc"

## Quoted emails (under e.g. mutt)
include "/usr/share/nano/mutt.nanorc"

## Patch files
include "/usr/share/nano/patch.nanorc"

## Manpages
include "/usr/share/nano/man.nanorc"

## Groff
include "/usr/share/nano/groff.nanorc"

## Perl
include "/usr/share/nano/perl.nanorc"

## Python
include "/usr/share/nano/python.nanorc"

## Ruby
include "/usr/share/nano/ruby.nanorc"

## Java
include "/usr/share/nano/java.nanorc"

## AWK
include "/usr/share/nano/awk.nanorc"

## Assembler
include "/usr/share/nano/asm.nanorc"

## Bourne shell scripts
include "/usr/share/nano/sh.nanorc"

## POV-Ray
include "/usr/share/nano/pov.nanorc"

## XML-type files
include "/usr/share/nano/xml.nanorc"

Les alias de votre .bashrc ou assimilé

#16Messageil y a 8 ans

un simple test -w peut aussi suffire :

if [[ -f "$arg" && ! -w "$arg" ]]

malheureusement il reste le cas ou nous créons un fichier

if [[ -f "$arg" && ! -w "$arg" ]] || [[ " $arg" =~ " /etc" ]]; then

mais si nous sommes déjà dans /etc/ et nous créons un fichier "en relatif"

[ "${arg:0:1}" != "/" ] && arg="$(pwd)/${arg}"
if [[ -f "$arg" && ! -w "$arg" ]] || [[ " $arg" =~ " /etc" ]]; then
    # pas en écriture ou nouveau fichier dans /etc/

la pour moi c'est bien; malheureusement nous ne testons que /etc/ a la création (99% des cas) ou exiger sudo a tout fichier qui n'est pas dans /home/ ? [[ ! " $arg" =~ " /home/" ]]

ca me donne au final (pas encore sûr pour la commande finale !! il ne me demande pas de mot de passe mais suis bien en admin :confus: )

nano() {
    local cmd='' arg=''
    for arg in "$@"; do
        [ "${arg:0:1}" != "/" ] && arg="$(pwd)/${arg}"
        if [[ -f "$arg" && ! -w "$arg" ]] || [[ " $arg" =~ " /etc" ]]; then
            # pas en écriture ou nouveau fichier dans /etc/
            cmd='sudo'
            break
        fi
    done
    command -p $cmd nano "$@"
}

Les alias de votre .bashrc ou assimilé

#17Messageil y a 8 ans

Problème résolu.
En fait j'ai juste utilisé le fait que la condition -w renvoie faux si le dossier n'est pas inscriptible.

function nano() {
   local cmd="$(which nano) $@"
   local arg
   for arg in "$@"; do
      if ([ -f "$arg" ] && [ ! -w "$arg" ]) || ([ ! -e "$arg" ] && [ ! -w $(dirname "$arg") ]); then
         cmd="sudo $cmd"
         break
      fi
   done
   eval $cmd
}

Par contre si on essaye de donner des options à nano (type +10,10 ou -c), on obtient une erreur car on essaye de passer ça à dirname...
Peut être qu'il faudrait carrément chercher du coté de getopt ?

Les alias de votre .bashrc ou assimilé

#18Messageil y a 8 ans

pas encore ca : ca marche pas en relatif : si je fais un cd /etc;nano xxxx .mais en rajoutant la ligne [ "${arg:0:1}" != "/" ] && arg="$(pwd)/${arg}" ca devrait marcher :saispas:

autre point; tu ne gère pas les fichiers avec un espace dans le nom
----------
et j'ai toujours le même problème; avec ma commande command -p sudo nano /etc/aaa" il ne me demande pas de mot de passe et pourtant je sauvegarde bien :pleure: un timer "sudo" extrêmement long ? ouf :sourire: après reboot il demande le mot de passe... mais le timer :confus:

Les alias de votre .bashrc ou assimilé

#19Messageil y a 8 ans

papajoke a écrit :pas encore ca : ca marche pas en relatif : si je fais un cd /etc;nano xxxx .mais en rajoutant la ligne [ "${arg:0:1}" != "/" ] && arg="$(pwd)/${arg}" ca devrait marcher :saispas:

Bah, avec le code que j'ai envoyé juste au dessus, ça marche en relatif justement.
Si je fais cd /etc/ && nano test on me demande bien le mot de passe, alors que si j'execute cd /etc/ && nano ~/test je n'en ai pas.

papajoke a écrit :autre point; tu ne gère pas les fichiers avec un espace dans le nom

En effet.
Du coup j'ai modifié le code pour les prendre en compte.

function nano() {
   local cmd="$(which nano)"
   local sudo=0
   local arg
   for arg in "$@"; do
      cmd="$cmd $(echo $arg | sed 's/ /\\ /g')"
      if [ sudo = 0 ] && (([ -f "$arg" ] && [ ! -w "$arg" ]) || ([ ! -e "$arg" ] && [ ! -w $(dirname "$arg") ])); then
         cmd="sudo $cmd"
         sudo=1
      fi
   done
   eval "$cmd"
}

Les alias de votre .bashrc ou assimilé

#20Messageil y a 8 ans

Une nouvelle fonction pour voir les paquets mis à jour depuis le dernier démarrage :

function pacman-updated() {
   last_boot=$(date +%s -d "$(journalctl --list-boots | awk 'END {print $4,$5}')")
   end=0
   tac "/var/log/pacman.log" | while read i && [ "$end" == 0 ]; do
       cur_date=$(date +%s -d "$(echo $i | awk '{print $1,$2}' | sed -r 's/(^.|.$)//g')")
       if [ "$last_boot" -le "$cur_date" ]; then
          echo "$i" | sed -rn "/\[ALPM\] (upgraded|installed|removed)/p" | cut -d " " -f "4-"
       else
           end=1
       fi
   done
}
Répondre