我设计了一个自定义脚本来grep .bash_history
备份文件的连续列表。在我的脚本中,我正在使用mktemp
创建一个临时文件,并将其保存到变量temp
。接下来,我使用cat
命令将输出重定向到该文件。
是否有办法创建临时文件(使用mktemp
),将输出重定向到它,然后将其存储在一个命令中的变量中,同时保留换行符?
下面的代码片段工作正常,但我觉得有一种更简洁和规范的方法可以在一行中实现这一点 - 可能使用process substitution或类似的东西。
# Concatenate all .bash_history files into a temporary file `temp`.
temp="$(mktemp)"
cat "$HOME/.bash_history."* > $temp
trap 'rm -f $temp' 0
# Set `HISTFILE` shell variable to the `temp` file.
HISTFILE="$temp"
keyword="$1"
# Search for `keyword` using the `history` command
if [[ "$keyword" ]]; then
# Enable history
set -o history
history | grep "$keyword"
# Disable history
set +o history
else
echo -e "usage: search <keyword>"
exit 0
fi
答案 0 :(得分:2)
如果您对使tempfile
以前没有非空值的条件赋值的副作用感到满意,可以通过${var:=value}
扩展直接进行:
cat "$HOME/.bash_history" >"${tempfile:=$(mktemp)}"
答案 1 :(得分:0)
我想有不止一种方法可以做到这一点。我发现以下是为我工作的:
cat myfile.txt > $(echo "$(mktemp)")
另外,不要忘记tee
:
cat myfile.txt | tee "$(mktemp)" > /dev/null
答案 2 :(得分:0)
cat myfile.txt | f=`mktemp` && cat > "${f}"