这个用于将多行字符串文字分配给变量的典型 Bash 脚本习惯用法:
read -r -d '' FILE_CONTENTS <<'EOF'
... contents ...
EOF
在我使用它的任何地方都很好地为我服务。
root
我像今天一样运行一个包含这个成语的脚本,结果一败涂地。文件会损坏,各种奇怪的东西从天而降。我蒸发了我的 Mac。顺便说一句,这个错误已经摧毁了......基本上一切。如果我可以投票支持自己拥有核能力,我会的。自我毁灭的有效性。
让我为您提供一个最小的工作配置来复制它:
# Recreating a .vimrc file, for example
read -r -d '' FILE_CONTENTS <<'EOF'
let mapleader = "<space>"
let maplocalleader = "\\"
EOF
echo "${FILE_CONTENTS}" > .vimrc
这作为用户工作得很好,tinosino
但是......作为根......任何带有反斜杠的东西都是有问题的。
为什么?在哪里寻找“差异”?选项?环境?“回声”的别名(?!)我迷路了。也尝试bash -x
过:我正在测试的脚本上的页面和页面失败。在 root 的设置中可能会改变什么?在哪里?
OS X version: 10.8.2
Bash version: 3.2.48(1)-release
我在剧本中有一个sh
Vsbash
守卫,但没有奏效……它是不是结构不好?
if [ ${BASH_VERSION-not_running_within_bash} = not_running_within_bash ]; then
echo This script is meant to be executed by the Bash shell but it isn\'t.
echo Continuing from another shell may lead to unpredictable results.
echo Execution will be aborted... now.
return
fi
它停止zsh
但不会停止sh
运行脚本......我怎么能这样做?
编辑:我求助于将脚本保护更改为:
if [[ ! $(ps -p $$ -o comm | paste -s - | awk '{ print $NF }') == *bash* ]]; then