Viivan (-) käyttö tiedostonimen sijasta

Komennolle, jos argumenttina käytetään - tiedostonimen sijasta tarkoittaa STDIN tai STDOUT.

  1. Mutta tässä esimerkissä se luo tiedoston nimeltä -:

    echo hello > - 

    Kuinka voin tehdä - tässä esimerkissä STDOUT?

  2. Vastaavasti miten voin - tarkoittaa tiedostoa nimeltä - esimerkeissä kuten:

    cat - 

Kommentit

  • Koska minulla on ilmeisesti oltava 50 mainetta kommentoidakseni suoraan .. / Dev / stdin / dev / stdout -kommentissa AIX: lla, joka on laillinen UNIX-johdannainen, ei ole näitä näennäislaitteita. Ja lisäkommenttina LINUX ei ole missään tapauksessa UNIX-johdannainen. Se on POSIX-yhteensopiva työ, ja suosituin UNIX-ish-käyttöjärjestelmistä ' tässä vaiheessa, mutta älä tee virhettä, tämä ei ole UNIX. Mutta vastausten pääasia täällä on oikea. Kuori ei tulkitse " – " -merkintää erityisenä, ja se välitetään siten suoraan jokaiselle yksittäiselle sovellukselle ARG: ksi. Jos sovellus ei tunnista
  • On olemassa myös 2>&- -rakenne, mikä tarkoittaa " sulje kuvaaja 2 ".
  • @ user95873, luulen, että halusit sanoa: vaikka Linux on Unix-tyyppinen, kaikki Unixin kaltaiset (tai tosi UNIX) eivät Linux . Sillä, onko Linux vai ei ' t true UNIX (eli yhden UNIX-määrityksen mukainen), ei ole yhteyttä

std {in, out, err} -asia. Kun / dev / std {sisään, ulos, virhe] on lisätty , ei puutu .

Vastaa

- -nimen käyttäminen tiedostonimenä tarkoittaa stdin / stdout on käytäntö, jota monet ohjelmat käyttävät. Se ei ole tiedostonimen erityinen ominaisuus. Ydin ei tunnista - erityisenä, joten kaikki järjestelmäkutsut, jotka viittaavat tiedostoon - tiedostona, käyttävät - kirjaimellisesti tiedostonimenä.

Bash-uudelleenohjauksella - ei tunnisteta erityiseksi tiedostonimeksi, joten bash käyttää sitä kirjaimellisena tiedostonimenä.

Kun cat näkee merkkijonon - tiedostonimenä, se käsittelee sitä stdinin synonyyminä. Tämän kiertämiseksi sinun on muutettava merkkijono, jonka cat näkee siten, että se viittaa edelleen tiedostoon nimeltä -. Tavallinen tapa tehdä se on lisätä tiedostonimi etuliitteeseen polku – ./- tai /home/Tim/-. Tätä tekniikkaa käytetään myös kiertämään vastaavia ongelmia, joissa komentorivivalinnat ovat ristiriidassa tiedostonimien kanssa, joten tiedostoa, johon viitataan nimellä ./-e, ei näy nimellä -e komentorivivalinta esimerkiksi ohjelmalle.

Kommentit

  • Se ' s Lisäämisen arvoinen, että /dev/stdin ja /dev/stdout ovat yleisesti saatavilla ja niitä voidaan käyttää - käytäntö.
  • @jmtd: / dev / std {sisään, ulos} eivät ole yleisesti saatavilla. Kaikilla unixeilla ei ole sitä.
  • Mielenkiintoista, oletin, että ne olivat osa POSIXia (mutta ' ei voi vahvistaa). He ' esiintyvät ainakin Linuxissa, BSD: ssä ja Solarisissa. Voitteko antaa esimerkin nykyaikaisesta UNIXista, josta puuttuu ne?
  • @camh Etkö ole varma saitko ilmoituksen, ja tämä on hyvin, hyvin vanha aihe; En ' ole varma, pystytkö, mutta olen ' m erittäin utelias, jos tiedät vastauksen jmtd ' kysymys? 🙂
  • @jmtd Olen ilmeisesti löytänyt alustavan vastauksen kysymykseen: unix.stackexchange.com/a/278368/31669

Vastaa

  1. Sen sijaan, että echo hello > -, voit käyttää echo hello > /dev/stdout.

    Vaikka ”-” on käytäntö, joka on otettava käyttöön jokaisen ohjelman, joka haluaa tukea sitä, /dev/stdin, /dev/stdout ja /dev/stderr ovat, kun käyttöjärjestelmä tukee niitä (ainakin Solaris, Linux ja BSD) , riippumaton sovelluksesta ja toimii sitten aikeissasi.

Vastaa

Kuten camh mainittu , - on vain joidenkin ohjelmien käyttämä nimeämistapa.Jos haluat viitata näihin virtoihin tiedostokuvaajalla, jonka komentotulkki tunnistaa, jiliagre oli oikea käytettäessä nimeä /dev/stdin tai /dev/stdout. Näiden tiedostonimien tulisi toimia missä tahansa paikassa, jossa normaali tiedostonimi toimisi.

  1. Tästä huolimatta ensimmäinen esimerkkisi on typerä. Kaikki lähdöt, jotka uudelleenohjausoperaattori kiinnittää kirjoittamaan tiedostoon, ovat jo ON-standardilähdössä, joten sen uudelleenohjaaminen ja kirjoittaminen takaisin mistä se on peräisin, on hyödytöntä. Käyttämäsi käyttäytyminen on putki, ei uudelleenohjaus:

    echo hello | 
  2. Toisessa esimerkissä sinun on yksinkertaisesti annettava merkintä siitä, että haluat saman nimisen roskatiedoston, ei sen sisäistä aliasta. Voit tehdä tämän helpoimmin määrittämällä polun tiedostolle näin:

    cat ./- 

Vastaa

Mitä tulee kohtaan 1, ohjelman on tuettava sitä. Et voi käyttää sitä vain mielivaltaisesti. Mitä tulee kohtaan 2, ohjaa tulo osoitteesta (esim. cat < -).

Vastaa

”-” -lähestymistavalla on paljon ongelmia. Ensinnäkin se edellyttää ”-” -merkin tulkintaa ja monet ohjelmat eivät suorita tällaista tulkintaa. Lisäksi on joitain ohjelmia, jotka tulkitsevat yhdysmerkin erottajana, joka merkitsee komentorivivalintojen loppua. Ohjelmat on kirjoitettu toimimaan tiedostonimi argumenttien kanssa, ”-” lähestymistapa on hakkerointi, mukava mutta heikko.

Paras tapa on:

$ echo hello > /dev/fd/1 

/dev/stdout on symboli-linkki /dev/fd/1

kommenteista

  • Suoja tulkitsee uudelleenohjauksen, ei ohjelmaa, jota kutsutaan.

Vastaa

Erikoismerkeillä on enimmäkseen kaksi merkitystä:

ASCII-numeerinen kaavio.

Komentosarja tai symbolinen.

On mahdollista, että yksi merkki edustaa merkkijonoa tai toimii merkkijonona. Ymmärrykseni.

C-kielellä fopen() -toiminto vie kaksi argumenttia ensimmäisen tiedostovirran ja toisen tilan, jossa tiedosto on avoinna. tila on merkkijono. vaikka se olisikin yksi merkki.

cat > " – " toimii.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *