Reacties
- Gerelateerd: De brondirectory van een Bash-script van binnen
- Dit is geen duplicaat van de vraag waarvoor het momenteel is gemarkeerd als een vraag. De twee vragen moeten in ieder geval worden vergeleken op basis van hun titel (evenals hun antwoorden). Dat het antwoord op deze vraag al door een ander wordt beantwoord, is, of zou niet relevant moeten zijn.
- @KennyEvitt eigenlijk, een van de belangrijkste redenen waarom we sluiten is juist omdat een antwoord elders gegeven. En in feite is de belangrijkste vraag hier eigenlijk hoe de uitvoer van een commando aan een variabele kan worden toegewezen, die wordt gedekt door de dupe. Ik heb ook het antwoord op dit specifieke geval gegeven, dus alle bases zijn gedekt. Het zou geen zin hebben om dit opnieuw te openen.
- @terdon Als een bron die beschikbaar en bedoeld is voor de hele populatie van Unix & Linux-gebruikers, is dit een waardevolle vraag, zelfs als de oorspronkelijke vragensteller eigenlijk gewoon een antwoord nodig had dat al ergens anders was behandeld. Ik denk dat deze vraag in ieder geval moet worden bewerkt om beter overeen te komen met de titel en opnieuw moet worden geopend, niet om verdere activiteit toe te staan, maar om niet te suggereren dat deze vraag slecht '.
- @KennyEvitt sluiten als een duplicaat betekent op geen enkele manier dat de vraag slecht is! Deze vraag zal hier voor altijd beantwoord blijven. Als u echt wilt weten hoe u de huidige werkdirectory kunt krijgen, vindt u hier uw antwoord. Als u alleen wilt weten hoe u de uitvoer van een commando in een variabele kunt opslaan, vindt u hier ook het antwoord door de link naar de dupe te volgen. Dit is in elk geval niet ' iets wat ik alleen zou moeten doen, als je sterk denkt dat het opnieuw moet worden geopend, open dan een discussie op Unix & Linux Meta waar dergelijke zaken moeten worden opgelost.
Antwoord
Daar Dat hoeft niet, het zit al in een variabele:
$ echo $PWD /home/terdon
De PWD
variabele is gedefinieerd door POSIX en zal werken op alle POSIX-compatibele shells:
PWD
Ingesteld door de shell en door het cd-hulpprogramma. In de shell zal de waarde als volgt vanuit de omgeving worden geïnitialiseerd. Als een waarde voor PWD wordt doorgegeven aan de shell in de omgeving wanneer deze wordt uitgevoerd, is de waarde een absolute padnaam van de huidige werkdirectory die niet langer is dan {PATH_MAX} bytes inclusief de afsluitende nulbyte, en de waarde bevat niet alle componenten die punt of punt-punt zijn, dan zal de shell PWD instellen op de waarde van de omgeving. Anders, als een waarde voor PWD wordt doorgegeven aan de shell in de omgeving wanneer deze wordt uitgevoerd, is de waarde een absolute padnaam van de huidige werkdirectory, en bevat de waarde geen componenten die punt of punt-punt zijn, dan is het is niet gespecificeerd of de shell PWD instelt op de waarde van de omgeving of PWD instelt op de padnaam die door pwd -P zou worden uitgevoerd. Anders stelt het hulpprogramma sh PWD in op de padnaam die door pwd -P zou worden uitgevoerd. In gevallen waarin PWD is ingesteld op de waarde van de omgeving, kan de waarde componenten bevatten die verwijzen naar bestanden van het type symbolische link. In gevallen waarin PWD is ingesteld op de padnaam die zou worden uitgevoerd door pwd -P, als er onvoldoende toestemming is voor de huidige werkdirectory of voor een ouder van die map, om te bepalen wat die padnaam zou zijn, is de waarde van PWD niet gespecificeerd. Toewijzingen aan deze variabele kunnen worden genegeerd. Als een applicatie de waarde van PWD instelt of uitschakelt, is het gedrag van de hulpprogrammas cd en pwd niet gespecificeerd.
Voor het meer algemene antwoord, de manier om de uitvoer van een commando in een variabele op te slaan, is door het commando tussen $()
of ` `
(backticks) te plaatsen:
var=$(command)
of
var=`command`
Van de twee, de $()
heeft de voorkeur omdat het gemakkelijker is om complexe commandos te bouwen zoals command0 $(command1 $(command2 $(command3)))
.
Answer
dir=$(pwd)
Dit is draagbaarder en heeft de voorkeur boven de backticks-methode.
Door $()
te gebruiken, kunt u de commandos nesten
bijv .: mech_pwd=$(pwd; echo in $(hostname))
Reacties
- Eigenlijk, als er iets is, zijn de backtics meer overdraagbaar omdat ze ouder zijn dan het
$()
formaat.Het is mogelijk dat er nog steeds machines zijn die shells draaien die de nieuwere$()
-notatie niet ' ondersteunen. Hoewel beide worden gedefinieerd door POSIX, heeft$()
tegenwoordig de voorkeur omdat het een schonere syntaxis is en kan worden genest ($(command1 $(command2))
) in een ver eenvoudiger manier dan de backticks.
Antwoord
Je kunt ofwel de omgevingsvariabele , of schrijf iets als:
dir=`pwd`
Antwoord
Je moet opdrachtsubstitutie gebruiken om de uitvoer van pwd
-opdracht naar een variabele op te slaan. Opdrachtvervanging kan backticks of dollartekens gebruiken. Zoals dit:
$ mkdir "/tmp/new dir" $ cd "/tmp/new dir" $ CWD="$(pwd)" $ echo $CWD /tmp/new dir $ cd ~ $ echo $CWD /tmp/new dir $ pwd /home/ja
Antwoord
De waarde van de huidige werkdirectory kan wees anders. Als je symbolische links hebt gebruikt om de huidige directory op te halen, zal pwd andere resultaten geven dan / usr / bin / pwd. Aangezien je bash gebruikt, zou ik gebruiken:
dir=$(/usr/bin/pwd)
of volgens opmerking:
dir=$(pwd -P)
omdat ik niet van achteraanhalingstekens hou omdat ze niet kunnen nesten.
Reacties
- dir = $ (pwd -P) werkt ook.