AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 473832
Accepted
elbarna
elbarna
Asked: 2018-10-08 10:01:25 +0800 CST2018-10-08 10:01:25 +0800 CST 2018-10-08 10:01:25 +0800 CST

使用“set -e”退出的 Slackbuild 脚本……没有错误!

  • 772

有了这个松弛构建:

#!/bin/sh

PRGNAM=libnfsidmap
VERSION=${VERSION:-0.25}
BUILD=${BUILD:-3}
TAG=${TAG:-_mg}

if [ -z "$ARCH" ]; then
  case "$( uname -m )" in
        i?86) ARCH=i486 ;;
        arm*) ARCH=arm ;;
           *) ARCH=$( uname -m ) ;;
  esac
fi


CWD=$(pwd)
TMP=${TMP:-/tmp/txz}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}

if [ "$ARCH" = "i486" ]; then
  SLKCFLAGS="-O2 -march=i486 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
  SLKCFLAGS="-O2 -march=i686 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O2 -fPIC"
  LIBDIRSUFFIX="64"
fi

set -e

SOURCE="http://www.citi.umich.edu/projects/nfsv4/linux/libnfsidmap/libnfsidmap-$VERSION.tar.gz"

if [ ! -e $PRGNAM-$VERSION.tar.gz ];
then
    wget -c $SOURCE
else
    echo "already download"
fi


rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xzvf $CWD/$PRGNAM-$VERSION.tar.gz
cd $PRGNAM-$VERSION

CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure \
  --prefix=/usr \
  --libdir=/usr/lib${LIBDIRSUFFIX} \
  --sysconfdir=/etc \
  --localstatedir=/var \
  --mandir=/usr/man \
  --build=$ARCH-slackware-linux

make
make install DESTDIR=$PKG
mkdir $PKG/etc
install -m 644 $CWD/idmapd.conf $PKG/etc

( cd $PKG
  find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | \
    xargs strip --strip-unneeded 2> /dev/null || true
  find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | \
    xargs strip --strip-unneeded 2> /dev/null
)

( cd $PKG/usr/man
  find . -type f -exec gzip -9 {} \;
  for i in $( find . -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done
)

mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a \
  $TMP/$PRGNAM-$VERSION/README $TMP/$PRGNAM-$VERSION/AUTHORS $TMP/$PRGNAM-$VERSION/COPYING \
    $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
chown -R root:root $PKG/usr/doc
find $PKG/usr/doc -type f -exec chmod 0644 {} \;

mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc

cd $PKG
/sbin/makepkg -l y -c n $CWD/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.txz

我编译

sudo sh *ld 

并且......它在 make 之后退出,即使在该行之后没有错误(!)

make install DESTDIR=$PKG

如果我删除 set -e,继续并正确创建我的包。为什么用 set -e 退出?据我所知,set -e 的意思是“如果发生错误,则退出脚本”。Distro 是 slackware 14.2,bash 是 4.3.48,我也尝试 bash script.sh..但还是一样。

scripting error-handling
  • 1 1 个回答
  • 59 Views

1 个回答

  • Voted
  1. Best Answer
    elbarna
    2019-07-23T05:09:51+08:002019-07-23T05:09:51+08:00

    找到解决方案 有罪的行是..

    ( cd $PKG
      find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | \
        xargs strip --strip-unneeded 2> /dev/null || true
      find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | \
        xargs strip --strip-unneeded 2> /dev/null
    )
    

    即使没有错误发生(并且在这种情况下被 2> 隐藏)如果不需要剥离或文件丢失,脚本返回非 0 状态并退出 (set -e)。有了这个修正

    ( cd $PKG
      find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | \
        xargs strip --strip-unneeded 2> /dev/null || true
      find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | \
        xargs strip --strip-unneeded 2> /dev/null || true
    )
    

    一切正常。

    所以我错过了|| true最新的带状线。

    • 1

相关问题

  • 检查root用户的登录历史

  • 在我的 Nginx 服务器环境中复制网站 (Wordpress) 的快速方法?

  • 启动应用程序的问题:命令行与 gui

  • 用于在日志文件中查找字符串的 Shell 脚本

  • 根据其中的值批量重命名(附加)CSV 文件

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve