Kommentarer
- Relatert: Få kildekatalog for et Bash-skript innenfra
- Dette er ikke en duplikat av spørsmålet som det for øyeblikket er merket for. De to spørsmålene bør sammenlignes, i det minste basert på titlene (samt svarene). At svaret på dette spørsmålet allerede er dekket av et annet er, eller burde være, irrelevant.
- @KennyEvitt faktisk er en av hovedårsakene til at vi lukker nettopp fordi et svar har blitt gitt andre steder. Og faktisk er hovedspørsmålet her hvordan man tilordner utdataene til en kommando til en variabel som dekkes av dupen. Jeg har også gitt svaret på denne spesifikke saken, så alle baser er dekket. Det ville ikke være noen fordel å åpne dette igjen.
- @terdon Som en tilgjengelig ressurs og beregnet for hele befolkningen av Unix & Linux-brukere, er dette et verdifullt spørsmål, selv om den opprinnelige spørgeren egentlig bare trengte et svar som allerede er dekket andre steder. Hvis noe, mener jeg at dette spørsmålet bør redigeres for å matche tittelen bedre og at det bør åpnes på nytt, ikke for å tillate videre aktivitet, men for å ikke antyde at dette spørsmålet er ' dårlig '.
- @KennyEvitt lukking som duplikat innebærer på ingen måte at spørsmålet er dårlig! Dette spørsmålet vil forbli her, besvart, for alltid. Hvis du virkelig vil vite hvordan du får tak i den nåværende arbeidskatalogen, finner du svaret her. Hvis du bare vil vite hvordan du lagrer utdataene til en kommando i en variabel, finner du også svaret her ved å følge lenken til dupen. I alle fall er dette ikke ' t virkelig noe jeg burde gjøre alene, hvis du føler sterkt at det skal gjenåpnes, vennligst åpne en diskusjon om Unix og Linux Meta der slike ting skal løses.
Svar
Der «det er ikke nødvendig å gjøre det, det er allerede i en variabel:
$ echo $PWD /home/terdon
PWD
variabel er definert av POSIX og fungerer på alle POSIX-kompatible skall:
PWD
Sett av skallet og av cd-verktøyet. I skallet skal verdien initialiseres fra miljøet som følger. Hvis en verdi for PWD sendes til skallet i miljøet når den kjøres, er verdien et absolutt stinavn for den gjeldende arbeidskatalogen som ikke er lenger enn {PATH_MAX} byte inkludert den avsluttende nullbyten, og verdien inneholder ikke alle komponenter som er prikk eller prikk, så skal skallet sette PWD til verdien fra miljøet. Ellers, hvis en verdi for PWD blir sendt til skallet i miljøet når den kjøres, er verdien et absolutt banenavn for den gjeldende arbeidskatalogen, og verdien inneholder ikke noen komponenter som er prikk eller prikk-punkt, så den er uspesifisert om skallet setter PWD til verdien fra miljøet eller setter PWD til banenavnet som vil sendes ut av pwd -P. Ellers setter SH-verktøyet PWD til banenavnet som skal sendes ut av pwd -P. I tilfeller der PWD er satt til verdien fra miljøet, kan verdien inneholde komponenter som refererer til filer av typen symbolsk lenke. I tilfeller der PWD er satt til stienavnet som vil sendes ut av pwd -P, er verdien av PWD, hvis det ikke er tilstrekkelig tillatelse til den gjeldende arbeidskatalogen, eller på en hvilken som helst av foreldrene til den katalogen, for å bestemme hva stienavnet ville være. uspesifisert. Oppgaver til denne variabelen kan ignoreres. Hvis et program angir eller deaktiverer verdien til PWD, er ikke oppførselen til cd- og pwd-verktøyene uspesifisert.
For det mer generelle svaret, måten å lagre utdataene til en kommando i en variabel er å legge inn kommandoen i $()
eller ` `
(backticks):
var=$(command)
eller
var=`command`
Av de to er $()
foretrekkes siden det er lettere å bygge komplekse kommandoer som command0 $(command1 $(command2 $(command3)))
.
Svar
dir=$(pwd)
Dette er mer bærbart og foretrekkes fremfor backticks-metoden.
Ved å bruke $()
kan du hekke kommandoene
f.eks: mech_pwd=$(pwd; echo in $(hostname))
Kommentarer
- Faktisk, hvis noe, er bakgrunnsbilder mer bærbare siden de går forut for
$()
-formatet.Det kan tenkes at det fortsatt er noen maskiner som kjører skjell som ikke støtter ' t som støtter den nyere$()
-notasjonen. Mens begge er definert av POSIX, foretrekkes$()
i dag fordi det er en renere syntaks og kan nestes ($(command1 $(command2))
) i et langt enklere måte enn backticks.
Svar
Du kan enten bruke miljøvariabelen $PWD
, eller skriv noe sånt som:
dir=`pwd`
Svar
Du må bruke kommandosubstitusjon for å lagre utdata fra pwd
-kommandoen til en variabel. Kommandosubstitusjon kan bruke backticks eller dollartegn. Slik:
$ mkdir "/tmp/new dir" $ cd "/tmp/new dir" $ CWD="$(pwd)" $ echo $CWD /tmp/new dir $ cd ~ $ echo $CWD /tmp/new dir $ pwd /home/ja
Svar
Verdien til gjeldende arbeidskatalog kan vær forskjellig. Hvis du brukte symbolske lenker for å få den nåværende katalogen, vil pwd gi andre resultater enn / usr / bin / pwd. Siden du bruker bash, vil jeg bruke:
dir=$(/usr/bin/pwd)
eller som per kommentar:
dir=$(pwd -P)
ettersom jeg ikke liker tilbake sitater siden de ikke kan hekke.
Kommentarer
- dir = $ (pwd -P) fungerer også.