Я не уверен на 100%, что я точно понимаю, о чем вы просите, и (увы) на данный момент у меня нет доступа к системе с bash
, но, возможно, вам поможет следующее. Поместите это в конец вашего .bashrc
:
if [ -f ~/.bash_initial_command ]
then
. ~/.bash_initial_command
rm ~/.bash_initial_command
fi
(где .bash_initial_command
- произвольное имя файла; выберите другое, если хотите), а затем напишите скрипт, который делает это:
(echo "history –s '$@'"; echo "$@") > ~/.bash_initial_command
Т.е. это помещает команду (которая представлена вышеупомянутому сценарию как аргумент (ы)) в место, где следующий интерактивный bash
чтобы начать, найдет и выполнит ее. (Например, если вы запустите set_up_cmd ls –l
, то ваш следующий bash
запустит ls –l
.) history –s
помещает команду в историю, не выполняя ее.
Примечание: я не знаю, будет ли это работать с .bashrc
.
Это потребует большего уточнения, если вы захотите использовать команды с кавычками (то есть, специальными символами в кавычках) или перенаправлением (<
или >
); или составные команды (например, ;
|
&&
или ||
Незначительная проблема: если вы нажмете команду Ctrl+C , это, вероятно, прекратит обработку .bashrc
и тем самым предотвратит удаление файла .bash_initial_command
. Вы, вероятно, можете справиться с этим, выполнив
if [ -f ~/.bash_initial_command ]
then
mv ~/.bash_initial_command ~/.bash_initial_command.$$
trap "rm -f ~/.bash_initial_command.$$" 0
. ~/.bash_initial_command.$$
rm -f ~/.bash_initial_command.$$
fi
Это дает .bash_initial_command
уникальное имя, чтобы избежать коллизий, и организует его удаление при выходе из оболочки.
Если вам нужно запустить несколько из них одновременно, рассмотрите возможность встраивания «tty» имени $(basename $(tty))
в имя файла .bash_initial_command
.
Конечно, выполнение этого делает еще более важным, чтобы убедиться, что ваш домашний каталог не доступен для записи никому, кроме вас.