Hur kan jag få den nuvarande arbetskatalogen? [duplicera]

<åt sidan class = "s-notice s-notice__info js-post-notice mb16" role = "status">

Denna fråga har redan svar här :

Kommentarer

  • Relaterat: Få källkatalog för ett Bash-skript inifrån
  • Detta är inte en duplikat av frågan som den för närvarande är markerad för. De två frågorna bör jämföras, åtminstone baserat på deras titlar (samt deras svar). Att svaret på denna fråga redan täcks av en annan är, eller borde vara, irrelevant.
  • @KennyEvitt faktiskt är en av de främsta anledningarna till att vi stänger just för att ett svar har ges någon annanstans. Och i själva verket är huvudfrågan här faktiskt hur man tilldelar utdata från ett kommando till en variabel, som täcks av dupen. Jag har också gett svaret på detta specifika fall, så alla baser täcks. Det skulle inte vara någon fördel att öppna det igen.
  • @terdon Som en tillgänglig resurs och avsedd för hela Unix & Linux-användare är detta en värdefull fråga, även om den ursprungliga askaren bara behövde ett svar som redan behandlats någon annanstans. Om något tycker jag att den här frågan borde redigeras så att den matchar titeln och att den bör öppnas igen, inte för att tillåta ytterligare aktivitet, men för att inte antyda att denna fråga är ' dåligt '.
  • @KennyEvitt att stänga som ett duplikat innebär på intet sätt att frågan är dålig! Denna fråga kommer att förbli här, besvarad för alltid. Om du verkligen vill veta hur du får den aktuella arbetskatalogen hittar du ditt svar här. Om du bara vill veta hur man sparar utdata från ett kommando i en variabel hittar du också svaret här genom att följa länken till dupen. I vilket fall som helst är detta inte ' t egentligen något jag ska göra ensam, om du känner starkt att det ska öppnas igen, vänligen öppna en diskussion om Unix & Linux Meta där sådana saker ska lösas.

Svar

Där ”det finns inget behov av att göra det, det är redan i en variabel:

$ echo $PWD /home/terdon 

PWD variabel är definierad av POSIX och fungerar på alla POSIX-kompatibla skal:

PWD

Ställ in av skalet och av cd-verktyget. I skalet ska värdet initialiseras från miljön enligt följande. Om ett värde för PWD skickas till skalet i miljön när det körs är värdet ett absolut sökväg för den aktuella arbetskatalogen som inte är längre än {PATH_MAX} byte inklusive den avslutande nollbyten, och värdet innehåller inte alla komponenter som är dot eller dot-dot, då ska skalet sätta PWD till värdet från miljön. Annars, om ett värde för PWD skickas till skalet i miljön när det exekveras, är värdet ett absolut sökväg för den aktuella arbetskatalogen, och värdet innehåller inte några komponenter som är punkt- eller punkt-punkt, då är det är ospecificerat om skalet sätter PWD till värdet från miljön eller sätter PWD till sökvägen som skulle matas ut av pwd -P. Annars ställer sh-verktyget PWD till sökvägen som ska matas ut av pwd -P. I fall där PWD är inställt på värdet från miljön kan värdet innehålla komponenter som hänvisar till filer av typ symbolisk länk. I fall där PWD är inställd på sökvägen som ska matas ut av pwd -P, om det inte finns tillräcklig behörighet i den aktuella arbetskatalogen eller på någon förälder till den katalogen, för att bestämma vad det sökvägen skulle vara, är värdet på PWD ospecificerad. Tilldelningar till denna variabel kan ignoreras. Om ett program ställer in eller avaktiverar värdet på PWD, är beteendet hos cd- och pwd-verktygen ospecificerat.


För det mer generella svaret, sättet att spara utdata från ett kommando i en variabel är att bifoga kommandot i $() eller ` ` (backticks):

var=$(command) 

eller

var=`command` 

Av de två är $() är att föredra eftersom det är lättare att bygga komplexa kommandon som command0 $(command1 $(command2 $(command3))).

Svar

dir=$(pwd)

Detta är mer bärbart och föredras framför backticks-metoden.

Med hjälp av $() kan du hämta kommandona

t.ex.: mech_pwd=$(pwd; echo in $(hostname))

Kommentarer

  • Faktiskt, om något, är backtics mer bärbara eftersom de föregår formatet $().Det kan förmodligen fortfarande finnas några maskiner som kör skal som inte ' t stöder den nyare $() notationen. Medan båda definieras av POSIX är $() att föredra idag eftersom det är en renare syntax och kan kapslas ($(command1 $(command2))) i ett långt enklare sätt än backticks.

Svar

Du kan antingen använda miljövariabeln $PWD, eller skriv något som:

dir=`pwd` 

Svar

Du måste använda kommandosubstitution för att spara utdata från pwd -kommandot till en variabel. Kommandosubstitution kan använda backticks eller dollartecken. Så här:

$ 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

Värdet för den aktuella arbetskatalogen kan vara annorlunda. Om du använde symboliska länkar för att hämta den aktuella katalogen ger pwd olika resultat än / usr / bin / pwd. Eftersom du använder bash skulle jag använda:

dir=$(/usr/bin/pwd) 

eller enligt kommentar:

dir=$(pwd -P) 

eftersom jag inte gillar tillbaka citat eftersom de inte kan bo.

Kommentarer

  • dir = $ (pwd -P) fungerar också.

Lämna ett svar

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