человек Баш говорит:
fg [jobspec]
Возобновите задание заданий на переднем плане и сделайте его текущим заданием.
Если задание отсутствует, то оболочка понимает текущее задание
используется.
А по «текущей работе»:
Символы %%
и
%+
относится к понятию оболочки текущего задания, которое является последним
задание остановлено, когда оно было на переднем плане или началось в фоновом режиме.
Это то, что вы действительно хотите сделать; в любом случае эмулируйте, что делает команда fg.
Большинство других приемов подробно описаны в Расширении параметров.
myfg() { # just so I know what I'm invoking while testing
local cmdline
cmdline=$(jobs -l "${1:-%%}") || return # bail if jobs failed
cmdline=${cmdline:30} # Extract the part we want
title "${cmdline%% *}" "${cmdline}"
builtin fg "$jobspec"
}
Для вашей команды run во многих случаях команда eval будет делать то, что вы
хочу:
eval "$@"
Но было бы неплохо защитить каждое слово одинарными кавычками, чтобы предотвратить
переоценивая это:
eval_safe() {
local args
args=( )
for word in "$@"; do
word=\'${word//\'/"'\\''"}\'
args+=( "$word" )
done
eval "${args[*]}"
}
В кавычках синтаксис bash становится действительно запутанным. Я не цитирую word=${...}
, тогда как я цитирую это в массиве. Независимо от того, цитируетесь вы или нет, значение в синтаксисе подстановки. И в одном присваивании bash не разделяет слова, тогда как в массиве. (Можно сделать "${array[@]//source/target}"
и сделать это одним выстрелом, но мы имеем дело с несколькими уровнями
цитируя уже.)
В любом случае, это оценит слова и передаст их обратно в bash, если они указаны
в них есть странные персонажи.
Это добавляет кучу уродливых цитат, где их, вероятно, нет
необходимо, поэтому давайте добавим:
[[ $word =~ ^[a-zA-Z0-9_./]+$ ]] || word=${...}
Это говорит: «Слово соответствует этому безопасному регулярному выражению, или мы цитируем его». Это, по крайней мере, достаточно стандартный синтаксис регулярных выражений, за исключением того, что в отличие от любого другого языка, вы обычно не ограничиваете регулярное выражение.