Я не уверен на 100%, что я точно понимаю, о чем вы просите, и (увы) на данный момент у меня нет доступа к системе, bash
на которой она установлена, но, возможно, вам поможет следующее. Поместите это в конце вашего .bashrc
:
if [-f ~ / .bash_initial_command]
тогда
, ~ / .Bash_initial_command
rm ~ / .bash_initial_command
фи
(где .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]
тогда
mv ~ / .bash_initial_command ~ / .bash_initial_command. $$
trap "rm -f ~ / .bash_initial_command. $$" 0
, ~ / .Bash_initial_command $$.
rm -f ~ / .bash_initial_command. $$
фи
Это дает .bash_initial_command
уникальное имя, чтобы избежать коллизий, и организует его удаление при выходе из оболочки.
Если вам нужно , чтобы иметь возможность запустить несколько из них одновременно, рассмотрит построение названия «терминального» $(basename $(tty))
в имени .bash_initial_command
файла.
Конечно, выполнение этого делает еще более важным, чтобы убедиться, что ваш домашний каталог не доступен для записи никому, кроме вас.
history –s
работает.bash_profile
.