Daha çox

Model Builder-də satır daxilində dəyişən əvəzetməsi üçün yalnız dəyişən adın (tam fayl yolu deyil) istifadəsi

Model Builder-də satır daxilində dəyişən əvəzetməsi üçün yalnız dəyişən adın (tam fayl yolu deyil) istifadəsi


ModelBuilder-də satır daxilində dəyişən əvəzetməsini Zonal Statistikada istifadə olunan bir raster adını çıxış cədvəlimdə bir sahə olaraq qaytarmaq üçün istifadə etməyə çalışıram (aşağıdakı modelə baxın).

Hal hazırda model istifadə edərək yaxşı işləyir"% Raster Dataset%"istədiyim sahəni əldə etmək üçün, ancaq TAM fayl yolunu qaytarır - məs.C / İstifadəçilər / Newton / GIS / Project / RASTER123sadəcə yerinə"RASTER123". Hər kəs yalnız giriş rasterinin adını necə seçəcəyini bilir, nəinki tam yolu?


Həmkarlarımın bəzi köməyi və çox sayda googling ilə cavab tapdım.

Əgər seçsəniz "Taxmaq" -> Yalnız model alətlər -> Təhlil yoluvə bunun üçün Raster Dataset-i bağlayın, Parse type = Name seçin və ParsePath alətindən "Dəyər" çıxışını "RasterName" olaraq dəyişdirin, ifadəni dəyişdirsəniz (yuxarıdakı jpeg-də mavi) "% RasterName%".


Tapın nəticəsini qabıq skriptində dəyişən kimi qeyd edin [dublikat]

Əvvəlcə tap əmriniz səhvdir. Cari qovluqda -gcc ilə bitən bütün sənədləri axtarmaq istəyirsinizsə, belə olmalıdır:

Findın nəticəsini GCC_VERSION-a saxlamaq üçün proses əvəzetməsindən istifadə edin:

Diqqət yetirin ki, -gcc ilə bitən birdən çox sənədiniz ola bilər, beləliklə ikiqat təklifə dəyişən ad əlavə edin:

Arxa gənələrdən istifadə etməlisiniz

və ya daha yaxşı tövsiyə olunan yeni stil əmr əvəz etmə sintaksisini

Hər iki forma dəstəklənsə də, birincisinə skript daxiletməsində məhdudiyyətlər var.

"$ ()" Əmr əvəzetmə forması, geri sitatlardan istifadə edərkən uyğunsuz davranış problemini həll edir. Misal üçün:

Əlavə olaraq, geri gətirilən sintaksis daxil edilmiş əmrin məzmununa görə tarixi məhdudiyyətlərə malikdir. Daha yeni "$ ()" forması hər hansı bir etibarlı daxilolma skriptini işləyə bilsə də, geri alınmış forma geri sitatlar daxil olan bəzi etibarlı skriptləri idarə edə bilməz. Məsələn, başqa şəkildə etibarlı olan bu skriptlər sol sütunda deyil, sağda işləyir:


Məlumat dəstləri

  • Daşınan məlumat dəstləri xüsusiyyətlər, rasters, masalar və sənədlərdir. Daşınan məlumat dəstlərini ehtiva edən parametrlər İstifadəçi tərəfindən müəyyən edilmiş dəyər giriş rejimini dəstəkləyir.
  • Daşınmayan məlumat dəstləri xüsusiyyətlərdən, rasterlərdən, cədvəllərdən və sənədlərdən başqa bir şeydir. Daşınmayan məlumat dəstlərinin iki kateqoriyası var.
    • Kompleks məlumat dəstləri həndəsi şəbəkələr, şəbəkə məlumat dəstləri, topologiyalar, VÖEN-lər və s. Bu məlumat növləri sadə xüsusiyyətlər arasındakı mürəkkəb əlaqələri modelləşdirdiyinə görə kompleks məlumat dəstləri kimi tanınır.
    • Konteyner məlumat dəstləri qovluqlar, fayl və fərdi yer verilənlər bazaları və xəritə sənədləri (.mxd) kimi maddələrdir. Bu məlumat növləri qarışıq digər məlumat dəstlərini ehtiva edir - dolayısı ilə adları, qabları.

    Bir alət parametrinin məlumat növünün müəyyənləşdirilməsi

    • Alətin istinad səhifəsində, sintaksis bölməsində hər bir parametri təsvir edən bir cədvəl var. Bu cədvəlin son sütununda parametrin məlumat növü var.
    • ModelBuilder-də bir dəyişəni sağ vurun, Xüsusiyyətlər vurun və Məlumat növü nişanını vurun. Məlumat növü informasiya qutusunun yuxarı hissəsində verilmişdir.
    • Bir skript aləti üçün Kataloq pəncərəsində skript alətini sağ vurun və Xüsusiyyətlər seçin. Xüsusiyyətlər informasiya qutusunda Parametrlər nişanını vurun. Hər bir parametrin məlumat növü parametrlər cədvəlində verilmişdir.

    Seçim siyahıları və daşınmayan məlumatlar dəstləri

    Bir giriş parametri dəyəri daşınmayan bir verilənlər bazasına istinad edən bir təbəqədirsə, giriş rejimi seçimi olaraq Seçim siyahısını seçə bilərsiniz. Məsələn, Nəqliyyat rejimi şəbəkəsi parametri istifadəçinin nəqliyyat rejimi üçün ən yaxşı marşrutu tapan bir tapşırıqda istifadə edilə bilər - avtomobil, velosiped və ya gəzinti.

    Bu parametrin məlumat növü Şəbəkə Dataset Layerdir. Şəbəkə məlumat dəstləri veb üzərindən nəql edilə bilməyən mürəkkəb məlumat dəstləridir, ona görə də bu parametr üçün İstifadəçi tərəfindən müəyyən edilmiş dəyər mövcud deyil. Bununla birlikdə, istifadə ediləcək qat adlarının seçim siyahısını təyin etmək üçün Seçim siyahısını istifadə edə bilərsiniz. Müştəri seçim siyahısından qat adlarından birini seçəcək və tapşırığınız müştərinin seçdiyi təbəqədən istifadə edərək, təbəqənin istinad etdiyi və serverdə saxlanılan şəbəkə verilənlər bazasına daxil olacaqdır.

    Əksər mürəkkəb məlumat dəstləri müvafiq təbəqə təqdimatına malikdir. Yuxarıdakı nümunə Şəbəkə Dataset Layers göstərdi. Digər kompleks məlumat dəstlərinə TIN təbəqələri, Geostatistik Qatlar, Parsel Parça Layers və LAS Dataset Layers daxildir. Daşınmayan bir verilənlər bazasına sahib olduğunuz zaman, onun təqdimat səviyyəsini giriş dəyəri kimi istifadə edə bilərsiniz. Yuxarıdakı nümunə tapşırıq bir model icra edilərək Street şəbəkə qatını giriş olaraq təmin etməklə yaradıldı. Model, bir qat adı əvəzinə diskdə bir şəbəkə məlumat dəstinə yol təqdim edilərsə, giriş rejimi Sabit dəyərə ayarlanacaq. Seçim siyahısı seçiminin görünməsi üçün giriş olaraq bir qat istifadə edərək aləti icra etməlisiniz.

    • Müştərilər İnternet üzərindən sadə xüsusiyyətləri, rasterləri, cədvəlləri və sənədləri göndərə və ala (nəql edə) bilər.
    • Şəbəkə məlumat dəstləri, VÖEN-lər və bağlama parçaları kimi kompleks məlumat dəstləri nəql edilə bilməz. Qovluqlar, geodatabases və xəritə sənədləri kimi konteyner məlumat dəstləri də nəql edilə bilməz. Yəni bir müştərinin bu kompleks məlumat dəstləri və ya konteynerlər yaratması və İnternet üzərindən nəql etməsi üçün bir yol yoxdur. Bu, ArcMap kimi tam xüsusiyyətli müştərilər üçün də doğrudur.
    • Əksər mürəkkəb məlumat dəstlərinin bir qat təmsilçiliyi var, yəni ArcMap-a verilənlər bazası əlavə edə bilərsiniz və məzmun cədvəlində bir qat yaradılır.
      • Qat adlarının seçim siyahısı yarada bilərsiniz və müştəri tapşırığınıza giriş olaraq bu qat adlarından birini və ya bir neçəsini seçəcəkdir. Bundan sonra tapşırığınız təbəqənin istinad etdiyi məlumat dəstini istifadə edəcəkdir.
      • Qat adlarının seçim siyahısını yaratmaq üçün giriş olaraq bir qat istifadə edərək alətinizi icra etməlisiniz. Xidmət Redaktorunda seçim siyahısı məzmun cədvəlindəki müvafiq təbəqələrdən doldurulacaqdır.
      • Alətinizi diskdəki bir verilənlər bazasının yolundan istifadə edərək icra etsəniz, məzmun cədvəlində düzgün tipli təbəqələriniz olsa da, Seçim siyahısı seçimi əlçatan olmayacaq.

      Bir təbəqə adlarının seçim siyahısını dərc etdiyiniz zaman, təbəqələrin istinad etdiyi məlumatlar layihə məlumatlarına çevrilir və serverin məlumat mağazasında tapılmadıqca CİS serverinə köçürüləcəkdir.

      Daimi dəyər və kompleks məlumat dəstləri

      Tapşırığınıza giriş kompleks bir verilənlər bazasına gedən bir yoldursa (məsələn, D: mydata chicago.gdb transport streetnetwork, Şəbəkə Dataset), Giriş rejimi Sabit dəyərə sabitlənəcəkdir. Giriş rejimi Sabit dəyərə uyğun olaraq nəşr etsəniz, verilənlər bazası serverə köçürüləcəkdir (serverin məlumat mağazasında olmadıqda) və tapşırığınız kopyalanan verilənlər bazasından istifadə edəcəkdir.

      Bir təbəqə yaratmaq üçün verilənlər bazasını ArcMap-a əlavə edə bilsəniz, təbəqəni giriş olaraq yenidən istifadə edə bilərsiniz. Bu, paylaşa biləcəyiniz yeni bir nəticə yaradacaq və Xidmət Redaktoru seçim siyahısını giriş rejimi kimi dəstəkləyəcəkdir.

      Həndəsi şəbəkələr üçün təbəqələr düzəldilə bilməz. Həndəsi şəbəkələri ehtiva edən parametrlər hər zaman giriş rejimini Sabit dəyərə gətirəcəkdir.

      Sabit dəyər və konteyner məlumat dəstləri

      Konteynerlər qovluqlar, fayl və fərdi yer verilənlər bazaları və xəritə sənədləri (.mxd) kimi maddələrdir. Bu məlumat növləri qarışıq digər məlumat dəstlərini ehtiva edir - dolayısı ilə adları, qabları. Konteynerlər nəql edilə bilməz və ümumi qayda budur ki, konteyner və onun içindəki bütün sənədlər serverə köçürüləcəkdir (konteyner serverin məlumat mağazasında olmadıqda). və dərc etdiyiniz tapşırıq kopyalanan konteynerdən istifadə edəcəkdir. Bəzi ümumi qablar aşağıda müzakirə olunur.

      Qovluqlar

      Tapşırığınıza giriş bir qovluqdursa, Giriş rejimi Sabit dəyərə düzəldiləcəkdir. Sabit dəyər olaraq təyin edilmiş giriş rejimi ilə nəşr etsəniz, qovluq və içindəkilər (aşağıdakı qeydə baxın) serverə kopyalanacaqdır (serverin məlumat mağazasında olmadıqda) və tapşırığınız kopyalanan qovluğu istifadə edəcəkdir.

      Nəşr prosesinin bir hissəsi olaraq qovluqlar serverə köçürüldükdə, yalnız fayllar və geodatasets kopyalanmır, qovluq içərisində heç bir alt qovluq kopyalanmaz. Fayl geodatabases, rasters və TINS ​​kimi bəzi geodatasets texniki cəhətdən qovluqlardır, lakin kopyalanacaq qovluqda tapılarsa serverə köçürüləcəklər.

      Xəritə sənədləri (.mxd)

      Tapşırığınıza giriş bir xəritə sənədidirsə, Giriş rejimi Sabit dəyərə sabitlənəcəkdir. Sabit dəyərə qoyulmuş giriş rejimi ilə dərc edirsinizsə, xəritə sənədini, bütün təbəqələrini və təbəqələrin istinad etdiyi bütün məlumat dəstlərini, server sənədinin serverindəki xəritə sənədini tapmaq mümkün olmadıqca, serverə kopyalanacaqdır. İstinad olunan məlumat dəstlərindən hər hansı biri serverin məlumat deposunda tapıla bilməzsə, onlar da serverə kopyalanacaqdır. Əslində, xəritə sənədi paketlənir, serverə göndərilir, sonra serverdə paketdən çıxarılır.

      Geodatabases

      Tapşırığınıza giriş bir yer məlumat bazasıdırsa, Giriş rejimi Sabit dəyərə düzəldiləcəkdir. Sabit dəyər olaraq təyin edilmiş giriş rejimi ilə nəşr etsəniz, geodatabase və onun məzmunu serverə kopyalanacaqdır (serverin məlumat mağazasında olmadıqda) və tapşırığınız kopyalanmış geodatabase-dən istifadə edəcəkdir.

      Şəxsi geodatabases (.mdb) server platformalarında dəstəklənmir (64 bit əməliyyat sistemləri) və serverə kopyalandıqda fayl geodatabases'a çevriləcəkdir. Müəssisə geodatabases da serverə kopyalandıqda fayl geodatabases'a çevriləcəkdir.

      Daşınmayan məhsul

      Alətinizin nəticəsi mürəkkəb bir verilənlər bazası və ya bir konteyner verilənlər bazasıdırsa, yenidən müştəriyə ötürülə bilməz. Xidmət redaktorunda, çıxış parametri bir Data növü simli göstərəcəkdir. Aşağıdakı şəkildə, tapşırıqla qaytarılan dəyər, verilənlər bazasının özü deyil, yaradılan VÖEN verilənlər bazasının adı olacaqdır.

      • Müştəriyə nəticəni xəritə kimi göndərmək üçün bir nəticə xəritəsi xidmətindən istifadə edin. Müştəriyə heç bir verilənlər bazası ötürülmür, yalnız məlumatların xəritəsi.
      • Dataseti nəql edilə bilən verilənlər bazasına çevirin. Məsələn, bir VÖEN-i (nəql olunmayan) bir raster məlumat dəstinə (nəql edilə bilən) çevirmək üçün TIN-dən Raster alətindən istifadə edə bilərsiniz.
      • Layers and Table Views alətlər dəstindəki alətlərdən birini istifadə edərək verilənlər bazasının bir qat paketi (.lpk) yaradın, sonra qat paketini yaratmaq üçün Package Layer alətindən istifadə edin. Bir təbəqə paketi bir dosyadır və fayllar İnternet üzərindən nəql olunur. Müştəri paketi açmalı olacaq.
      • Nəticə məlumat dəsti və ya qovluqdan bir sənəd yaratmaq və .zip faylını müştəriyə nəql etmək üçün ZIP yardım proqramından istifadə edin. Müştəri sənədin açılmasından məsuldur. Klip və gəmi xidməti nümunəsi bir tədqiqat sahəsindən bir fayl geodatabase (və digər formatlar) içərisinə qatlanır, daha sonra müştəriyə çatdırılmaq üçün .zip faylı yaradır. Bu texnikanı istifadə etmək istəyirsinizsə, aşağıdakı linklərə baxın:
          bir giriş qovluğu və bir çıxış faylı adını alır və sıxılmış .zip faylı yaradır. bir giriş .zip faylı və bir çıxış qovluğu götürür və məzmunu qovluğa yazır.

      • 3 Cavablar 3

        Subprocess.call metodu, sətirdə istifadəçi girişindən bir şey ola biləcəyi halda tövsiyə olunmayan qabığı istifadə etməsini söyləmədiyiniz müddətdə, boşluq ayırıcıları olmayan bir sətir deyil, parametrlər siyahısını götürür.

        Ən yaxşı yolu əmri siyahı şəklində qurmaqdır

        bu da parametrlərin (məsələn, yollar və ya fayllar) çağırılan proqrama boşluqlarla ötürülməsini asanlaşdırır.

        Hər iki yol da alt işləmə sənədlərində verilmişdir.

        Ayrılmış bir sətirdən keçə bilərsiniz, lakin sonra qabığın arqumentləri işlətməsinə icazə verməlisiniz


        8 Cavablar 8

        Envsubst (gnu gettext-in bir hissəsi) istifadə edə bilərsiniz:

        Yalnız müəyyən mühit dəyişənlərini əvəz etmək üçün bu suala baxın.

        Bu çox xoş deyil, amma işləyir

        Kabuk skriptində olsaydı, belə görünürdü:

        Sualla qətiliklə əlaqəli olmayan, lakin dəyişənlərin fayldan oxunması halında redaktə edin.

        Perl ilə rastlaşırsınızsa (ancaq gettext və envsubst deyil), qısa bir skriptlə sadə əvəz edə bilərsiniz:

        Dəyişən adların yalnız böyük hərf və alt cizgilərə sahib olacağını güman etdim, amma lazımi gəldikdə ilk nümunəni dəyişdirmək asan olmalıdır. $ ENV <. > Perl'in gördüyü mühitə istinadlar.

        $ sintaksis və ya qurulmamış dəyişənlərə bir səhv atarsanız, daha çox işə ehtiyacınız olacaq. Gettext'in envsubst-un yaxın ekvivalenti belə olacaq:

        Proses mühiti vasitəsilə belə dəyişənlərin bəslənməsinin ümumiyyətlə bir az iffy kimi göründüyünü düşünsəm də: fayllarda təsadüfi dəyişənlərdən istifadə edə bilməzsiniz (çünki xüsusi mənaları ola bilər) və bəzi dəyərlər ən azı yarı ola bilər. içlərindəki həssas məlumatlar.


        4 Cavablar 4

        Standart girişi təmsil edən "saxta" fayl adını / dev / stdin istifadə edə bilərsiniz.

        Echo əmri və boru göstərilən dəyişənin məzmununu növbəti komanda aşpazının standart girişinə göndərir və standart girişi (ayrıca bir fayl təsviri olaraq) açıb oxuyur.

        Baş qabığın prosesi əvəz etmə xüsusiyyətindən istifadə etmənin başqa bir yolu da bir FIFO-nun / tmp və / / var / tmp altında yaradılmasına səbəb olur və ya əməliyyat sisteminə görə adlanan bir fayl təsviri (/ dev / fd / *) istifadə edir. Əvəz sintaksisinin (& lt (cmd)) yerini FIFO və ya FD adı alır və içindəki əmr arxa planda işləyir.

        Artıq aşpaz əmri dəyişənlərin məzmununu bir sənəddə olduğu kimi oxuyur.

        Bu birdən çox giriş faylı üçün də istifadə edilə bilər:

        Bu tətbiqetmənin imkanlarından asılıdır. Adı çəkilən bir sənəddə israr edə bilər və ya istəyə bilməz, axtarıla bilən bir sənəddə də israr edə bilər.

        Anonim boru

        Bəzi tətbiqetmələr yalnız hər hansı bir yerdən daxil olanları oxuyur. Tipik olaraq standart girişdən oxumaq üçün borcludurlar. Bir sətirdə məlumatlarınız varsa və tətbiqin standart girişinə ötürmək istəyirsinizsə, bunun bir neçə yolu var. Bir borudan məlumat ötürə bilərsiniz:

        Burada əks-səda istifadə etməyin, çünki qabıqdan asılı olaraq, arxa çöpləri dəf edə bilər.

        Tətbiq bir fayl arqumentində israr edərsə, standart giriş deməkdir - qəbul edə bilər. Bu ümumi bir konvensiyadır, lakin sistematik deyil.

        Tətbiqin həqiqi bir fayl adına ehtiyacı varsa, standart giriş demək üçün / dev / stdin keçin.

        Bəzi tətbiqetmələr üçün bu da kifayət deyil: müəyyən xüsusiyyətlərə sahib bir fayl adına ehtiyacları var, məsələn verilmiş bir uzantı ilə və ya müvəqqəti fayllar yaratdıqları yazılabilir bir qovluqda bir fayl adına ehtiyacları var. Belə hallarda ümumiyyətlə müvəqqəti bir fayla ehtiyacınız var, baxmayaraq ki bəzən adlanan bir boru kifayətdir.

        Boru adlandırdı

        Bir boruya ad vermək mümkündür. Bunu tamlıq üçün qeyd edirəm, amma nadir hallarda ən əlverişli yoldur. Məlumatı diskdə əldə etməkdən çəkinir. Tətbiqin adında məhdudiyyətlər olan bir fayla ehtiyacı olduğu halda uyğun ola bilər, lakin axtarıla bilən fayla ehtiyac yoxdur.

        Müvəqqəti sənəd

        Tətbiqə ehtiyac varsa axtarılır fayl, müvəqqəti bir fayl yaratmalısınız. Axtarıla bilən bir fayl, tətbiqin hər dəfə ixtiyari hissələrini oxuyaraq irəli və irəli gedə biləcəyi bir sənəddir. Boru buna imkan vermir: heç geriyə getmədən, ardıcıllıqla başdan sona qədər oxunması lazımdır.

        Bash, ksh və zsh, müvəqqəti bir fayl vasitəsilə giriş kimi bir simli ötürmək üçün əlverişli bir sintaksisə malikdir. Diqqət yetirin ki, hər zaman simli bir xətt əlavə edirlər (onsuz da olsa belə).

        Digər qabıqlarla və ya müvəqqəti faylı hansı qovluğa daxil etdiyinə nəzarət etmək istəyirsinizsə, müvəqqəti faylı əl ilə yaratmalısınız. Əksər unices müvəqqəti faylı etibarlı bir şəkildə yaratmaq üçün bir mktemp yardım proqramı təmin edir. (Heç vaxt bənzər bir şey istifadə etməyin … & Gt / tmp / temp. $ ! Digər istifadəçilər kimi işləyən digər proqramların da dosyeni qaçırmasına imkan verir.) Budur müvəqqəti bir fayl yaradan və kəsildiyi təqdirdə onu silməyə çalışan bir skript.

        Müvəqqəti faylın harada yaradılacağını seçmək üçün, mktemp zəngi üçün TMPDIR mühit dəyişənini təyin edin. Məsələn, müvəqqəti fayllar üçün varsayılan yer əvəzinə cari qovluqda müvəqqəti fayl yaratmaq:

        (. $ Əvəzinə $ PWD istifadə etmək sizə mütləq bir fayl adı verir, yəni $ tmp-nin artıq eyni faylı təyin etməyəcəyindən narahat olmadan skriptinizdə cd-yə zəng edə bilərsiniz.)

        Tətbiqə müəyyən bir uzantılı bir fayl adı lazımdırsa, müvəqqəti bir qovluq yaratmalı və orada bir fayl yaratmalısınız. Müvəqqəti qovluq yaratmaq üçün mktemp -d istifadə edin. Yenə də müvəqqəti qovluğun harada yaradıldığını nəzarət etmək istəyirsinizsə TMPDIR mühit dəyişənini təyin edin.


        Bunun səbəbi qabığın əmr satırındakı dəyişəni genişləndirməsidir əvvəl həqiqətən əmri işləyir və o zaman dəyişən mövcud deyil. İstifadə edirsinizsə

        ixrac dəyişəni sonradan yerinə yetirilən əmrlər mühitində göstərəcəkdir (bunun bash-da necə işlədiyi barədə kömək ixracına baxın). Dəyişənin yalnız bir əmr mühitində görünməsinə ehtiyacınız varsa, sınadığınızdan istifadə edin, yəni:

        Kabuk sintaksisi bunu varlıq olaraq izah edir funksional olaraq bərabərdir:

        Maraqlı tərəf, ixrac əmrinin dəyişən üçün ixrac bayrağını dəyişdirməsidir ad. Beləliklə:

        TEST, ixrac edildiyi anda təyin olunmasa da ixrac ediləcəkdir. Bununla yanaşı, daha çox müəyyən edilməməsi ixrac xüsusiyyətini ondan çıxarmalıdır.

        Şübhə edirəm ki, sahib olmaq istəyirsən qabıq dəyişənlərin ətraf mühit dəyişənlərindən çox məhdud bir əhatəyə sahib olması. Ətraf mühit dəyişənləri əmrlərə olduqda ötürülən sətirlərin siyahısıdır edam edildi.

        Var = dəyər sətirini echo qəbul etdiyi mühitə ötürürsünüz. Bununla birlikdə, echo ətraf mühit siyahısı ilə heç bir şey etmir¹ və hər halda əksər qabıqlarda əks-səda qurulur və buna görə də deyil edam edildi.

        Bu başqa bir məsələ olardı. Budur var = dəyərini sh əmrinə ötürürük və sh ətrafını istifadə edir. Kabuklar, ətraf mühitlərindən aldıqları dəyişənlərin hər birini bir qabıq dəyişkəninə çevirir, buna görə də aldığı var mühit dəyişəni $ var dəyişəninə çevriləcək və o echo əmr sətrində genişləndirildikdə echo dəyəri olacaqdır. Ətraf mühit varsayılan olaraq miras alındığından, echo da mühitində var = dəyər alacaq (və ya icra edilsəydi), lakin yenə də echo ətraf mühitə əhəmiyyət vermir.

        İndi şübhələndiyim kimi, qabıq dəyişənlərinin əhatə dairəsini məhdudlaşdırmaq istəyirsinizsə, bir neçə mümkün yanaşma var.

        Portativ (Bourne və POSIX):

        Yuxarıdakı (.) Alt qabığa başlayır (əksər qabıqlarda yeni bir qabıq prosesi), buna görə orada elan edilən hər hansı bir dəyişən yalnız bu alt qabığı təsir edəcək, buna görə yuxarıdakı kodun "1: value" və " 2: "və ya" 2: any-var-was-set-before-to-set ".

        Bourne bənzər əksər qabıqlarla funksiyaları və quraşdırılmış "yerli" istifadə edə bilərsiniz:

        Zsh ilə satır içi funksiyalardan istifadə edə bilərsiniz:

        Bash və zsh ilə (lakin kül, pdksh və ya AT & ampT ksh deyil) bu hiylə də işləyir:

        Bir neçə daha qabıqda işləyən bir variant (dash, mksh, yash) lakin zsh deyil (sh / ksh emulyasiyasında olmadıqda):

        (POSIX qabıqlarında xüsusi quraşdırılmış (burada qiymətləndir) qarşısında əmr istifadə edərək onların xüsusiyyətlərini aradan qaldırır (buradakı dəyişənlərin tapşırıqları geri qayıtdıqdan sonra qüvvədə qalır))

        ¹ Kəskin şəkildə desək, bu tamamilə doğru deyil. Bir neçə tətbiq lokalizasiya mühiti dəyişənləri ilə maraqlanacaq (LANG, LOCPATH, LC_ *.), GNU tətbiqi POSIXLY_CORRECT mühit dəyişəninə əhəmiyyət verir (env echo --version ilə POSIXLY_CORRECT = 1 env echo --versiyanı bir GNU sistemində müqayisə edin).


        1 Cavab 1

        müəyyən bir dəyişənin dəyərini başqa birinə əvəz etmək.

        Bu təsvir bir neçə məsələdə səhvdir. Dəyişən əvəzetmə ad onunla dəyişən (üstəgəl bəzi sintaktik tük) dəyər. Bundan əlavə, bir dəyişəndə ​​“daxilində” deyil, bir əmrdə işləyir. Komanda bir dəyişənin dəyərini təyin edən bir əmr ola bilər, lakin bu çoxları arasında yalnız bir vəziyyətdir.

        Məsələn, echo $ foo əmri dəyişənin dəyərini göstərir. Mənbə kodu $ foo, müvafiq çıxış isə foo dəyişəninin dəyərini ehtiva edir.

        Buna “dəyişən əvəzetmə” deyilməsinin səbəbi qabığın simlərin (və simlərin siyahılarının) bir sıra çevrilmələri ilə işləməsidir. Məsələn (sadələşdirilmiş), ls -l $ dir /*.$ ext əmrini nəzərdən keçirin. Bunu qiymətləndirmək üçün bir neçə şey ardıcıllıqla baş verir:

        1. Kabuk əmri təhlil etməyə başlayır və üç sözə bölünür: ls, -l və $ dir /*.$ ext.
        2. Üçüncü sözdə, qabıq yerinə yetiriləcək iki dəyişən əvəzetmə görür (dollar məzənnələri bu kontekstdə bunun mənasını verir). Dir dəyərinin / some / path olduğunu və ext dəyərinin txt olduğunu söyləyin, sonra shell $ dir /*.$ ext /some/path/*.txt-ə yenidən yazın. Bu bir əvəzetmədir, çünki hər dəyişənin dəyəri dollar adı sintaksisinin yerinə qoyulur.
        3. Kabuk, /some/path/*.txt joker naxışını uyğun fayl adları siyahısına genişləndirir.
        4. Kabuk ls-ləri hesablandığı arqumentlərlə icra edir.

        Əksər proqramlaşdırma dillərində dəyişənin dəyərini almaq üçün sadəcə dəyişənin adını yazırsınız. Kabuk, hərfi simli kimi yozulan bir ad yazsanız, interaktiv istifadə üçün nəzərdə tutulmuşdur. Bu səbəbdən bir dəyişənin dəyərini almaq üçün sintaksisin "bir dəyişənin dəyərini almaq istəyirəm" demək üçün əlavə bir işarəsi var.

        niyə bu hərəkət əvəzinə yalnız "bir mətn redaktorunda əl ilə düzəldərək dəyişənin dəyərini dəyişdirmək" deyərək xüsusi bir müddət tələb edir?

        Dəyişənli əvəzetmənin dəyişənin dəyərinin dəyişdirilməsi ilə heç bir əlaqəsi yoxdur. Dəyişənin dəyərinin dəyişdirilməsi bir tapşırıqdır.

        Əlbətdə bir tapşırıq, digər hər hansı bir əmr kimi dəyişkən əvəzetmələr ehtiva edə bilər. Ancaq dəyişən əvəzetmələr tapşırıqlar üçün xüsusi olaraq dizayn edilməyib.

        Üstəlik bir dəyişənin dəyərini bir redaktorla dəyişdirə bilməzsiniz. Onsuz da elan edilmiş bir dəyişənin hər prosesdə bir dəyəri var, sistem konfiqurasiyası deyil. Sizi quran konfiqurasiya sənədlərinə sahib ola bilərsiniz ilkin bir dəyişənin dəyəri və bu sənədlərdəki ilk dəyəri dəyişdirmək üçün bir redaktor istifadə edə bilərsiniz, lakin bundan sonra dəyər dəyişə bilər.


        Tercihləri saxlayan mühit dəyişkənləri

        PowerShell xüsusiyyətləri istifadəçi seçimlərini saxlamaq üçün mühit dəyişkənlərindən istifadə edə bilər. Bu dəyişənlər üstünlük dəyişənləri kimi işləyir, lakin yaradıldıqları seansların uşaq sessiyaları tərəfindən miras qalır. Tercih dəyişənləri haqqında daha çox məlumat üçün, haqqında_preference_variables-a baxın.

        Tercihləri saxlayan mühit dəyişənlərinə aşağıdakılar daxildir:

        Cari iclas üçün müəyyən edilmiş icra siyasətini saxlayır. Bu mühit dəyişən yalnız bir iclas üçün icra qaydası təyin etdiyiniz zaman mövcuddur. Bunu iki fərqli şəkildə edə bilərsiniz.

        Komut satırından İcraSiyasi iclas üçün icra siyasətini təyin edən parametr.

        Set-ExecutionPolicy cmdlet istifadə edin. Kapsam parametrini & quotProcess & quot dəyəri ilə istifadə edin.

        PowerShell, modullar və onların cmdletləri haqqında məlumatları önbelleğe almaq üçün istifadə olunan fayl üzərində nəzarət təmin edir. Önbellek bir əmr axtararkən başlanğıcda oxunur və bir modul gətirildikdən bir müddət sonra arxa plana yazılır.

        Önbelleğin standart yeri:

        • Windows PowerShell 5.1: $ env: LOCALAPPDATA Microsoft Windows PowerShell
        • PowerShell 6.0 və daha yüksək versiya: $ env: LOCALAPPDATA Microsoft PowerShell
        • Windows olmayan default:

        Önbellek üçün standart fayl adı ModuleAnalysisCache-dir. Birdən çox PowerShell nümunəsi quraşdırıldıqda, fayl adı onaltılıq bir şəkilçi əlavə edir ki, hər bir quraşdırma üçün unikal bir fayl adı olsun.

        Komanda kəşfi düzgün işləmirsə, məsələn Intellisense mövcud olmayan əmrləri göstərirsə, önbellek sənədini silə bilərsiniz. Önbellek PowerShell'i növbəti dəfə başlatdığınızda yenidən qurulur.

        Önbelleğin standart yerini dəyişdirmək üçün PowerShell'i başlamazdan əvvəl mühit dəyişənini təyin edin. Bu mühit dəyişkənindəki dəyişikliklər yalnız uşaq proseslərini təsir edir. Dəyər PowerShell-in fayl yaratmaq və yazmaq üçün icazəsi olan tam bir yolu (fayl adı daxil olmaqla) adlandırmalıdır.

        Fayl önbelleğini söndürmək üçün bu dəyəri etibarsız bir yerə qoyun, məsələn:

        Bu yolu təyin edir NUL qurğu. PowerShell yolu yaza bilmir, lakin səhv qaytarılmır. İzləyici istifadə edərək bildirilən səhvləri görə bilərsiniz:

        Modul analiz önbelleğini yazarkən, PowerShell lazımsız olaraq böyük bir önbelleğin qarşısını almaq üçün artıq mövcud olmayan modulları yoxlayır. Bəzən bu çeklər arzuolunmazdır, bu halda bu mühitin dəyişən dəyərini 1-ə qoyaraq söndürə bilərsiniz.

        Bu mühit dəyişəninin qurulması cari prosesdə dərhal qüvvəyə minir.

        $ Env: PSModulePath mühit dəyişənində modulları və mənbələri tapmaq üçün axtarılan qovluq yerlərinin siyahısı var.

        Varsayılan olaraq, $ env: PSModulePath-a təyin edilmiş effektiv yerlər bunlardır:

        Sistem səviyyəsində yerlər: Bu qovluqlarda PowerShell ilə təchiz olunan modullar var. Modullar $ PSHOME Modules yerində saxlanılır. Ayrıca, bu, Windows idarəetmə modullarının quraşdırıldığı yerdir.

        İstifadəçi tərəfindən quraşdırılmış modullar: Bunlar istifadəçi tərəfindən quraşdırılmış modullardır. Quraşdırma modulunda bir Əhatə dairəsi modulun cari istifadəçi üçün və ya bütün istifadəçilər üçün quraşdırıldığını təyin etməyə imkan verən parametr. Daha çox məlumat üçün Quraşdırma moduluna baxın.

        • Windows-da, istifadəçinin xüsusi yeri CurrentUser əhatə dairəsi $ HOME Documents PowerShell Modules qovluğudur. Yeri Bütün istifadəçilər əhatə dairəsi $ env: ProgramFiles PowerShell Modules.
        • Windows xaricindəki sistemlərdə istifadəçinin yerləşdiyi yer CurrentUser əhatə dairəsi $ HOME / .local / share / powerhell / Modules qovluğudur. Yeri Bütün istifadəçilər əhatə dairəsi / usr / local / share / powerhell / Modules.

        Bundan əlavə, Proqram Dosyaları qovluğu kimi digər qovluqlarda modul quraşdıran quraşdırma proqramları, yerlərini $ env: PSModulePath dəyərinə əlavə edə bilər.


        Qeydli Dəyişənlər¶

        Dəyişənlərin başqa bir əsas istifadəsi bir əmri işə salmaq və nəticəni dəyişənə yazmaq üçün həmin əmrin nəticəsini istifadə etməkdir. Nəticələr moduldan modula dəyişəcəkdir. Oyun kitablarını icra edərkən -v-nin istifadəsi nəticələr üçün mümkün dəyərləri göstərəcəkdir.

        Ansible-də yerinə yetirilən bir tapşırığın dəyəri dəyişəndə ​​qeyd oluna bilər və sonra istifadə edilə bilər. Bunun bəzi nümunələrinə Şartlar bölümündə baxın.

        Bu sənədin başqa bir yerində də qeyd edildiyi halda, qısa bir sintaksis nümunəsi:

        Qeydə alınmış dəyişənlər, playbook çalışmasının qalan hissəsində ev sahibliyi üçün etibarlıdır və bu, Ansible-dəki "faktların" ömrü ilə eynidır. Effektiv şəkildə qeydə alınan dəyişənlər həqiqətlər kimidir.

        Bir döngə ilə qeydiyyatdan istifadə edərkən bir döngü zamanı dəyişənə yerləşdirilən məlumat quruluşu, nəticənin atributunu, yəni moduldan gələn bütün cavabların siyahısını ehtiva edir. Bunun necə işlədiyinə dair daha dərindən bir nümunə üçün registrdən loop ilə istifadə etmək üçün Döngələr bölməsinə baxın.

        Bir tapşırıq uğursuz olarsa və ya atlanırsa, dəyişən yenə də bir uğursuzluq və ya atlanan status ilə qeyd olunur, dəyişəni qeyd etməməyin yeganə yolu etiketlərdən istifadə etməkdir.


        Videoya baxın: Introduction to ArcGIS Model Builder