Запустите файл параметров с помощью powershell в Linux

#linux #powershell #shell

#linux #powershell #оболочка

Вопрос:

У нас есть файл с именем test, который будет содержать следующие данные.

 export username=ganesh

export dept =hr

export job =developer
  

Мне нужно запустить этот файл из PowerShell, чтобы инициализировать эту переменную.

Я попробовал приведенный ниже код в Linux, и он работает, но в командной строке PowerShell он не работает.

 . /data/abcd/test>/dev/null 2>amp;1
  

Примечание: /data/abcd — это папка

Как я могу добиться этого с помощью PowerShell?

Комментарии:

1. AFAIK, PowerShell не существует в Linux, в котором есть GNU bash

2. Привет, мы установили powershell в Linux, и он работает. мы можем использовать его с помощью команды pwsh

3. Basile, вы уже несколько лет можете установить PowerShell Core на WIn / OSX / Linux. На самом деле, использование PowerShell Core в Linux выше, чем в Windows. Ресурсы: ядро powershell загрузить linux

4. Для запуска ваш файл должен иметь расширение .ps1. При рассмотрении различий в синтаксисе языка попробуйте использовать эту шпаргалку в качестве отправной точки. Краткий справочник по BASH и PowerShell

Ответ №1:

Экспорт — это синтаксис оболочки, но не синтаксис Powershell, поэтому вы не можете создать исходный файл непосредственно в Powershell. У вас есть два варианта:

[1] Измените имя файла на что-то вроде «env-file.ps1» и измените содержимое на то, что Powershell может понять:

 $Env:username = "ganesh"
$Env:dept = "hr"
$Env:job = "developer"
  

Затем вы можете создать исходный файл и использовать переменные:

 . ./env-file.ps1 
$Env:job
developer
  

Или [2] Вы можете прочитать файл как есть, динамически преобразовать строку в синтаксис Powershell, а затем выполнить оценку строки с помощью Invoke-Expression :

 foreach ($line in get-content env-file.env) {
   if ($line -match "(?ix)^ s* export s  ([^=] ) s* = s* ([^=] )$") {
      $cmd = '$Env'   ":"   $matches[1]   "="   '"'   $matches[2]   '"'
      Invoke-Expression($cmd)
   }
}
  

После этого вы можете использовать переменные:

 $Env:username
$Env:dept
$Env:job
  

Другими словами, приведенный выше код служит в качестве сложного source файла переменных среды экспорта в Unix.