команда внутри переменной

команда внутри переменной

Я хочу заполнить переменную строкой команды, считанной из файла, и выполнить ее. Никаких проблем, когда это одна команда. Когда я использую |, это не работает. Есть ли помощь??? Спасибо

$ f="ls -1"
$ $f
a
a0
a1
a2
a3
b1
cfg
cfile
dfile
e
fcorreo.txt
log
logs
work
$ f="ls -1 | tail -1"
$ $f
ls: cannot access |: No such file or directory
ls: cannot access tail: No such file or directory
$ f='ls -1 | tail -1'
$ $f
ls: cannot access |: No such file or directory
ls: cannot access tail: No such file or directory
$ echo $f
ls -1 | tail -1

решение1

Проблема в том, что конвейер ( |) — это "мета"-команда, запускаемая оболочкой, и она соединяет две разные команды. Так же, как и ls -1 | tail -1запуск двух команд ( lsи tail) и использование конструкции оболочки ( |) для соединения с двумя. (так что ваш заголовокакоманда внутри переменнойневерно, так как ваша проблема на самом деленесколькокоманды внутриодинокийпеременная)

В любом случае, решение — проанализировать/выполнить вашу команду с помощью оболочки:

f="ls -1 | tail -1"
sh -c "${f}"

В качестве альтернативы вы также можете использовать eval, что работает без создания нового процесса оболочки:

f="ls -1 | tail -1"
eval "${f}"

решение2

Вы можете использовать функцию, как показано ниже;

f() { ls -1 | tail -1; } 

Например;

user@host $ f() { ls -1 | tail -1; }
user@host $ f
test.txt

Связанный контент