ある種の問題をデバッグしようとしています。ニックスDebianベースのオペレーティングシステムのLinuxインストーラスクリプト
言ったようにここ、このスニペットは次のとおりです/etc/bash.bashrc
。
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
一部のNixコマンドは非対話型シェルで実行されるため、コードスニペットの前にインポートする必要があるため、一部のNixコマンドは無効になります。
たとえば、このコマンドを考えましたが、1つの例外を除いてうまくいきます。
sudo sed -i '1i source /etc/profile.d/nix.sh' /etc/bash.bashrc
Nixスクリプトでは、init関数はすでに関数によって提供され、関数のコマンドshell_source_lines()
にパイプされてファイルを追加するため、パイプを維持しながら開始部分を追加する必要があります。configure_shell_profile()
tee -a
shell_source_lines() {
cat <<EOF
# Nix
if [ -e '$PROFILE_NIX_FILE' ]; then
. '$PROFILE_NIX_FILE'
fi
# End Nix
EOF
}
configure_shell_profile() {
for profile_target in "${PROFILE_TARGETS[@]}"; do
if [ -e "$profile_target" ]; then
_sudo "to back up your current $profile_target to $profile_target$PROFILE_BACKUP_SUFFIX" \
cp "$profile_target" "$profile_target$PROFILE_BACKUP_SUFFIX"
else
# try to create the file if its directory exists
target_dir="$(dirname "$profile_target")"
if [ -d "$target_dir" ]; then
_sudo "to create a stub $profile_target which will be updated" \
touch "$profile_target"
fi
fi
# What I need to modify :
if [ -e "$profile_target" ]; then
shell_source_lines \
| _sudo "extend your $profile_target with nix-daemon settings" \
tee -a "$profile_target" # Needs to be replaced
fi
done
}
ファイルの前にSTDINテキストを追加する方法が見つかりません。これを行う方法はありますか?
ベストアンサー1
このコマンドをGNU sedバージョンに置き換えます。
tee -a "$profile_target"
sed -i -e '1r /dev/stdin' -e '1N' "$profile_target"
- 少なくとも2行の入力を想定してください。