Vad är `editor`-kommandot i bash?

Jag letade efter ett kommando som förhoppningsvis skulle öppna den aktuella användarens favorittextredigerare, för jag skriver ut några instruktioner med kommandon i en blogg. Jag förväntade mig ett kommando som edit och jag hittade editor. För mig började det vim i terminalen, vilket ligger nära det Jag ville; jag använder vim-gtk. Jag började söka efter ett sätt att få redaktören att använda vim-gtk och hittade den här frågan som förklarar en $EDITOR miljövariabel, men jag är inte säker på om det ens är relaterat till editor -kommandot. Jag försökte man editor , men det tog bara upp vim-manpage.

Hur kan jag få editor att använda en textredigerare efter eget val, eller ska jag använda ett annat kommando?

Svar

Detta är en Debian-ism (och visas därför i Ubuntu, Mint, etc.). De har konfigurerat ett länkanrop ed editor. Du kan spåra det på följande sätt:

$ which editor /usr/bin/editor $ ls -l /usr/bin/editor lrwxrwxrwx 1 root root 24 Nov 24 19:10 /usr/bin/editor -> /etc/alternatives/editor $ ls -l /etc/alternatives/editor lrwxrwxrwx 1 root root 18 Nov 24 19:46 /etc/alternatives/editor -> /usr/bin/vim.gnome $ ls -l /usr/bin/vim.gnome -rwxr-xr-x 1 root root 2403392 Oct 26 2012 /usr/bin/vim.gnome 

Så att du kan se att editor bara är en Unix-länk till den körbara vim.gnome.

Med editor?

Jag tror inte att jag ” d gå i den riktningen för att ställa in editor på något meningsfullt sätt för användarna, eftersom det inte är vad jag anser vara standard.

Dessutom kan du ställa in $EDITOR miljövariabel för att peka på allt du vill, vim, gedit, emacs, etc. Men den här variabeln är bara garanterad att användas av andra verktyg som sudo, git och subversion som är särskilt utformade för att kopplas till att använda variabeln $EDITOR.

Implementeringsidéer

Jag skulle bara ställa in ett alias efter eget val och antingen instruera användarna att det är tillgängligt för dem via deras $HOME/.bashrc -fil som alias X, eller ställa in den som en systemkonfiguration i filen /etc/profile.d/our_aliases.sh, som alias X.

Eller så kan du bara berätta för användarna att systemen ”tillhandahåller gedit, gvim, vim, emacs osv. och skär igenom sockerbeläggningen och lär dem om dessa saker direkt.

Eller så kan du ge en text fil med namnet /etc/help.txt som de kunde köra via ett kommando help (alias help="less /etc/help.txt") i ett skal som skulle ge grundläggande kommandon och hur man utför olika uppgifter. Detta tillvägagångssätt gör att du kan anpassa hjälpen när tiden går med nya funktioner eller tips och det ger dem mer än bara editor bekvämlighetskommando.

Kommentarer

  • Ja, användarna vet vad deras redaktör heter, och jag säger bara att de ska redigera en viss fil istället för att visa ett kodexempel. Jag var på väg med kodexemplen och jag insåg inte ’ att jag blev lite pedantisk. Det ’ är synd att Ubuntu inte ’ inte ställer in $EDITOR variabeln, nu har jag kan ’ inte lita på det eller editor symlink.
  • s/Ubuntu/Debian/g
  • standarder , suck …

Svar

Redigeringsprogrammet som kallas av vissa program när du ber dem redigera en fil. Du måste själv ställa in miljövariabeln.

Om du använder csh eller tcsh, vid shellprompten:

setenv EDITOR vim 

Om du använder bash eller ksh, ange sedan:

EDITOR=vim; export EDITOR 

(Ersätt ”vim” med den redigerare du vill använda.)

EDITOR variabeln är den som du behöver som standard för vissa applikationer för att anropa redigeraren. Det finns en annan variabel som heter VISUAL som används för att specificera den skärmorienterade redigeraren. I allmänhet vill du ställa in det till samma värde som EDITOR variabeln. Ursprungligen skulle EDITOR vara inställt på ed (en linjebaserad redigerare) och VISUAL skulle ha ställts in på vi (en skärm- baserad redaktör).

VISUAL="vim"; export VISUAL VISUAL="$EDITOR"; export VISUAL #even better 

När du har gjort detta kommer de flesta Unix-program som använder textredigerare att använda den redigerare du har ställt in. Genom att följa kommandona ovan, du ställer endast in standardredigeraren för den aktuella datorsessionen. För att göra dessa ändringar permanenta måste du placera lämpliga kommandon som beskrivs ovan i din .login eller .cshrc filer (för csh- eller tcsh-användare) eller din .profile -fil (om du använder bash eller ksh).

Det finns också en annan miljövariabel om du låtsas använda Emacs. Det är ”s ALTERNATE_EDITOR och har samma effekt, men det används när Emacs anropas med --alternate-editor -alternativet.

Från GNU Emacs Manual :

Alternativet --alternate-editor=command är användbart när du kör emacsclient i ett skript. Det anger ett kommando som ska köras om emacsclient inte kan kontakta Emacs. Till exempel, följande inställning för EDITOR miljövariabel ger alltid en redigerare, även om Emacs inte körs:

EDITOR="emacsclient --alternate-editor vi +%d %s" 

Kommentarer

  • Att säga sh betyder inte ’ t meningsfullt. sh är vanligtvis systemet ’ s skal. Det brukade vara Thomson-skalet, sedan Bourne-skalet och sedan idag på de flesta system, ett eller annat skal implementera POSIX sh -specifikationen. export EDITOR=vim syntaxen är POSIX, men inte Bourne eller Thomson. export VISUAL=$EDITOR fungerar i bash och några implementeringar av ksh. Du behöver export VISUAL="$EDITOR" i de flesta andra skal. VISUAL=$EDITOR export VISUAL fungerar i alla Bourne-liknande skal inklusive Bourne-skalet.
  • Är det vanligt och accepterat att ställa in EDITOR till ett sådant flervärdsvärde? Om så är fallet kan jag inte använda which "$EDITOR" eller which $EDITOR för att kontrollera om det finns.

Svar

Du måste ange editor i miljövariabeln EDITOR. Lägg till följande kommando i din .profile:

export EDITOR=editor 

Om du vill ha vim som standardredigerare lägger du till istället

export EDITOR=vim

Personlig preferens: Jag använder redaktörens absoluta söknamn i miljövariabeln. Till exempel

export EDITOR=/usr/bin/vim

Svar

editor -kommandot är ubuntu-specifikt. Det är inte bärbart eller ens vanligt (utanför ubuntu). Kommandot är också inställt i hela systemet och inte per användare. Så det fungerar är att /usr/bin/editor bara är en symlänk till en redigerare i systemet. Som sådan är det samma för alla användare.

Miljövariabeln $EDITOR är ganska standard. Den används av många program som behöver användaren för att redigera något. Som sådan är det den här variabeln du ska använda när du vill åberopa användarens redaktör.

Kommentarer

  • Det är inte Ubuntu-specifikt, den kommer från Debian och använder Debian ’ s alternativ -mekanism. Den ’ är tillgänglig i alla Debian-derivat, inte bara Ubuntu.

Svar

Det här är vad jag använder i mitt skript:

# Find a suitable text editor editor="$VISUAL" [ -z "$editor" ] && editor="$EDITOR" [ -z "$editor" ] && which editor >/dev/null && editor=editor [ -z "$editor" ] && which nano >/dev/null && editor=nano [ -z "$editor" ] && which vi >/dev/null && editor=vi [ -z "$editor" ] && editor=no_editor_found # Use the editor we found $editor "$filename" 

Jag har inte lagt in citat runt det slutliga samtalet till $editor för att säkerställa att emacsclient-exemplet ovan fungerar.

Därför tror jag att det är viktigt att alltid ställa in något värde för editor, annars sista raden kunde oavsiktligt köra $ filnamn . I mitt fall valde jag no_editor_found men du kunde lika använd pico eller ed där.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *