Перенаправление не отображается в качестве аргумента для сценария источника

Моя проблема в том, что я не могу печатать на экране, когда пишу скрипт bash

. myBashScript.sh < text.txt 

В myBashScript.sh я просто распечатываю

 echo $2 

Но вместо того, чтобы печатать «text.txt», он показывает «newLine». Как мне известно, «<» – это новая строка.

Почему $2 не text.txt ?

  • Перенаправление стандартного вывода ошибки в переменную bash
  • Использование `perf` несколько раз с вводом файла
  • Опорожнение файла без нарушения записи на него
  • в чем разница между `>> / dev / stderr` (с пробелом) и`> & 2`?
  • Исходное перенаправление bash - в чем разница между >> и> &, перенаправлением и дублированием?
  • Как читать строку с трубкой
  • Как вы обрабатываете всю команду как sudo, которая включает перенаправление или конвейер?
  • Декодирование «prog> file 2> & 1"
  • One Solution collect form web for “Перенаправление не отображается в качестве аргумента для сценария источника”

    Я предполагаю, что вы на самом деле печатаете

     ./myBashScript.sh < text.txt 

    с косой чертой.

    Когда вы запускаете ./myBashScript.sh < text.txt , ваша интерактивная оболочка фактически захватывает < text.txt и интерпретирует ее как специальную инструкцию – в частности, она интерпретирует вашу командную строку как означающую, что она должна запускать myBashScript.sh со стандартным вход подключен к text.txt. Затем ваша оболочка удаляет < text.txt из командной строки перед передачей управления myBashScript.sh. Что касается вашего сценария оболочки, он получает нулевые аргументы, а $2 пуст. Ваш скрипт переводится просто так:

     echo 

    который печатает новую строку.

    Если вы хотите на самом деле напечатать имя файла, вам следует рассмотреть

     #!/bin/sh echo $1 

    которые вы можете запустить:

     $ ./myShellScript text.txt text.txt 

    Если, с другой стороны, вы хотите распечатать содержимое файла, вы должны использовать cat (1); ваш сценарий оболочки должен быть

     #!/bin/sh cat $1 

    которые вы можете запустить:

     $ ./myShellScript text.txt Hello from text.txt, a file containing a bunch of test strings. 
    Linux и Unix - лучшая ОС в мире.