gpt4 book ai didi

shell - 如何使用fish预先添加文件

转载 作者:行者123 更新时间:2023-12-04 00:55:06 24 4
gpt4 key购买 nike

我看到 bash 有几个很好的答案甚至 zsh (即 Here )。虽然我找不到合适的 fish .
是否有规范的或干净的将一个字符串或几行添加到现有文件中(就地)?类似于 cat "new text" >> test.txt为追加做。

最佳答案

作为fish 有意简化的一部分,它避免了zsh 中的语法糖。等效于 zsh-only 代码 <<< "to be prepended" < text.txt | sponge text.txt在 fish 是:

begin; echo "to be prepended"; cat test.txt; end | sponge test.txt
sponge是来自 moreutils 的工具包裹; fish 版本与 zsh 原始版本一样需要它。然而,你可以很容易地用一个函数替换它;考虑以下:
# note that this requires GNU chmod, though it works if you have it installed under a
# different name (f/e, installing "coreutils" on MacOS with nixpkgs, macports, etc),
# it tries to figure that out.
function copy_file_permissions -a srcfile destfile
if command -v coreutils &>/dev/null # works with Nixpkgs-installed coreutils on Mac
coreutils --coreutils-prog=chmod --reference=$srcfile -- $destfile
else if command -v gchmod &>/dev/null # works w/ Homebrew coreutils on Mac
gchmod --reference=$srcfile -- $destfile
else
# hope that just "chmod" is the GNU version, or --reference won't work
chmod --reference=$srcfile -- $destfile
end
end

function mysponge -a destname
set tempfile (mktemp -t $destname.XXXXXX)
if test -e $destname
copy_file_permissions $destname $tempfile
end
cat >$tempfile
mv -- $tempfile $destname
end

function prependString -a stringToPrepend outputName
begin
echo $stringToPrepend
cat -- $outputName
end | mysponge $outputName
end

prependString "First Line" out.txt
prependString "No I'm First" out.txt

关于shell - 如何使用fish预先添加文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63106326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com