Wat is het editor-commando in bash?

Ik was op zoek naar een commando dat hopelijk de favoriete teksteditor van de huidige gebruiker zou openen, omdat ik enkele instructies met commandos in een blog schrijf. Ik verwachtte een commando als edit, en ik vond editor. Voor mij begon het vim in de terminal, wat dicht bij wat Ik wilde; ik gebruik vim-gtk. Ik begon te zoeken naar een manier om de editor vim-gtk te laten gebruiken en vond deze vraag waarin een $EDITOR omgevingsvariabele, maar ik weet niet zeker of dat zelfs gerelateerd is aan het editor commando. Ik probeerde man editor , maar dat heeft zojuist de manpage van vim opgeroepen.

Hoe kan ik editor een teksteditor naar keuze laten gebruiken, of moet ik een ander commando gebruiken?

Answer

Dit is een Debian-isme (en verschijnt daarom in Ubuntu, Mint, enz.). Ze hebben een linkoproep ed editor. U kunt het als volgt traceren:

$ 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 

U kunt dus zien dat editor slechts een Unix-link is naar het uitvoerbare bestand vim.gnome.

Met editor?

Ik denk niet dat ik zou in die richting gaan om editor op een zinvolle manier in te stellen voor gebruikers, aangezien het niet is wat ik als standaard zou beschouwen.

Bovendien kun je de $EDITOR omgevingsvariabele die verwijst naar alles wat je maar wilt, vim, gedit, emacs, etc. Maar deze variabele wordt gegarandeerd alleen gebruikt door andere tools zoals sudo, git en subversion die specifiek zijn ontworpen om te worden gekoppeld aan het gebruik van de variabele $EDITOR.

Implementatie-ideeën

Ik zou alleen een alias naar keuze instellen en ofwel de gebruikers instrueren dat het beschikbaar is ze via hun $HOME/.bashrc -bestand als alias X, of stel het in als een systeemconfiguratie in het bestand /etc/profile.d/our_aliases.sh, als alias X.

Of u kunt gebruikers gewoon vertellen dat de systemen “bieden gedit, gvim, vim, emacs, enz. en snijd door de suikerlaag heen en leer ze meteen over deze dingen.

Of je kunt een tekst opgeven bestand met de naam /etc/help.txt dat ze konden uitvoeren via een commando help (alias help="less /etc/help.txt") in een shell dat zou basiscommandos opleveren en hoe verschillende taken moeten worden uitgevoerd. Deze aanpak stelt je in staat om de hulp naarmate de tijd verstrijkt aan te passen met nieuwe functies of tips en het geeft ze meer dan alleen het editor gemakscommando.

Opmerkingen

  • Ja, gebruikers zullen weten hoe hun editor heet, en ik zal ze gewoon vertellen een bepaald bestand te bewerken in plaats van een codevoorbeeld te tonen. Ik was goed bezig met de codevoorbeelden en ik realiseerde me niet ‘ niet dat ik een beetje pedant begon te worden. Het ‘ is jammer dat Ubuntu niet ‘ de $EDITOR variabele instelt, nu heb ik kan ‘ daar niet op vertrouwen of de editor symlink.
  • s/Ubuntu/Debian/g
  • standaarden , zucht …

Antwoord

Het bewerkingsprogramma dat door sommige programmas wordt aangeroepen wanneer u hen vertelt een bestand te bewerken. U moet de omgevingsvariabele zelf instellen.

Als u csh of tcsh gebruikt, bij de shell-prompt:

setenv EDITOR vim 

Als u bash of ksh, en voer dan in:

EDITOR=vim; export EDITOR 

(Vervang “vim” door de editor die je wilt gebruiken.)

De EDITOR variabele is degene die je standaard nodig hebt voor sommige applicaties om de editor aan te roepen. Er is een andere variabele genaamd VISUAL die wordt gebruikt om de schermgeoriënteerde editor te specificeren. Over het algemeen wilt u deze instellen op dezelfde waarde als de variabele EDITOR. Oorspronkelijk zou EDITOR zijn ingesteld op ed (een regelgebaseerde editor) en VISUAL zou “zijn ingesteld op vi (een scherm- gebaseerde editor).

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

Wanneer je dit hebt gedaan, zullen de meeste Unix-programmas die teksteditors gebruiken de editor gebruiken die je hebt ingesteld. Door de bovenstaande opdrachten te volgen, u stelt de standaardeditor alleen voor de huidige computersessie in. Om deze wijzigingen permanent te maken, moet u de juiste opdrachten die hierboven worden beschreven in uw .login of bestanden (voor csh- of tcsh-gebruikers) of uw .profile -bestand (als u bash of ksh gebruikt).

Er is ook een andere omgevingsvariabele, als je doet alsof je Emacs gebruikt. Het “s ALTERNATE_EDITOR, en heeft hetzelfde effect, maar het wordt gebruikt wanneer Emacs wordt aangeroepen met de --alternate-editor optie.

Van de GNU Emacs-handleiding :

De optie --alternate-editor=command is handig bij het uitvoeren van emacsclient in een script. Het specificeert een commando dat moet worden uitgevoerd als emacsclient geen contact kan opnemen met Emacs. De volgende instelling voor de EDITOR omgevingsvariabele geeft bijvoorbeeld altijd een editor, zelfs als Emacs niet actief is:

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

Reacties

  • Zeggen sh doet niet ‘ klopt niet. sh is gewoonlijk de systeemshell van ‘. Vroeger was het de Thomson-shell, daarna de Bourne-shell en tegenwoordig, op de meeste systemen, implementeerde de ene shell de POSIX sh -specificatie. De export EDITOR=vim syntaxis is POSIX, maar niet Bourne of Thomson. De export VISUAL=$EDITOR werkt in bash en sommige implementaties van ksh. Je hebt export VISUAL="$EDITOR" nodig in de meeste andere shells. VISUAL=$EDITOR export VISUAL zal werken in alle Bourne-achtige shells, inclusief de Bourne-shell.
  • Is het gebruikelijk en geaccepteerd om EDITOR naar een dergelijke meerwoordswaarde? Als dit het geval is, kan ik which "$EDITOR" of which $EDITOR niet veilig gebruiken om te controleren of het aanwezig is.

Antwoord

U moet de editor specificeren in de omgevingsvariabele EDITOR. Voeg de volgende opdracht toe aan uw .profile:

export EDITOR=editor 

Als u vim als je standaardeditor, voeg je in plaats daarvan toe

export EDITOR=vim

Persoonlijke voorkeur: ik gebruik de absolute padnaam van de editor in de omgevingsvariabele. Bijvoorbeeld:

export EDITOR=/usr/bin/vim

Antwoord

De editor commando is ubuntu-specifiek. Het is niet draagbaar of zelfs niet gebruikelijk (buiten ubuntu). De opdracht is ook systeembreed ingesteld, en niet per gebruiker. De manier waarop het werkt is dat /usr/bin/editor slechts een symbolische link is naar een editor op het systeem. Als zodanig is het hetzelfde voor alle gebruikers.

De $EDITOR omgevingsvariabele is redelijk standaard. Het wordt gebruikt door veel programmas waarbij de gebruiker iets moet bewerken. Als zodanig is het deze variabele die u moet gebruiken als u de editor van de gebruiker wilt oproepen.

Opmerkingen

  • Het is niet specifiek voor Ubuntu, het komt van Debian en gebruikt het Debian ‘ s alternatieven mechanisme. Het ‘ is beschikbaar in alle Debian-derivaten, niet alleen Ubuntu.

Answer

Dit is wat ik in mijn script gebruik:

# 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" 

Ik heb geen aanhalingstekens geplaatst rond de laatste aanroep van $editor om ervoor te zorgen dat het bovenstaande emacsclient-voorbeeld werkt.

Daarom denk ik dat het belangrijk is om altijd een waarde in te stellen voor editor, anders de laatste regel zou onbedoeld $ filename kunnen uitvoeren. In mijn geval heb ik no_editor_found gekozen, maar je kunt ook gebruik daar pico of ed.

div

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *