3

Я хочу написать скрипт, который будет повторять командную строку, которая обычно содержит каналы

./myscript.sh ls -lart |grep ^d

И в myscript.sh я делаю кучу вещей, а затем хочу выполнить ls -lart |grep ^d и перенаправить вывод этого во что-то еще.

(заранее извините, если это действительно просто и решение с 1 линией).

Пока я пробовал

$@ | someothercommand

а также

$* | someothercommand

Но безрезультатно ...

1 ответ1

8

То, как оболочка анализирует командную строку, означает, что входные данные для вашего сценария оболочки будут остановлены, когда он попадет в канал. То, что вам, вероятно, придется сделать, чтобы обойти это, это поместить вашу командную строку в кавычки, так:

./myscript.sh "ls -lart |grep ^d"

Затем в вашем скрипте используйте команду eval для ее выполнения, как в:

 eval "$@" | someothercommand 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .