Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux chmod的替代品--OS X上的参考?_Linux_Macos_Bash_Jenkins - Fatal编程技术网

Linux chmod的替代品--OS X上的参考?

Linux chmod的替代品--OS X上的参考?,linux,macos,bash,jenkins,Linux,Macos,Bash,Jenkins,我正在尝试将一些jenkins bash脚本从Ubuntu移植到OS X。linux(我认为它最初是GNU)chmod有一个--reference选项,允许从引用文件复制模式。我正在寻找OSX的等效代码,最好不安装额外的软件包。更好的是跨平台解决方案 具体片段: # expand all the templates find "$OUTPUT_PATH" -name "*.template" | while read FILE ; do sed \ -e "s/%{NAM

我正在尝试将一些jenkins bash脚本从Ubuntu移植到OS X。linux(我认为它最初是GNU)chmod有一个--reference选项,允许从引用文件复制模式。我正在寻找OSX的等效代码,最好不安装额外的软件包。更好的是跨平台解决方案

具体片段:

# expand all the templates
find "$OUTPUT_PATH" -name "*.template" | while read FILE ; do
    sed \
        -e "s/%{NAME}/$OPTION_NAME/g" \
        -e "s/%{TITLE}/$OPTION_TITLE/g" \
        -e "s/%{VERSION}/$OPTION_VERSION/g" \
        -e "s/%{WHEN}/$OPTION_WHEN/g" \
            "$FILE" > "${FILE%.*}"
    chmod --reference="$FILE" "${FILE%.*}"
    rm -f "$FILE"
done

[编辑]stat-r与保存文件模式的组合是正确的,OSX上不存在stat-c,请先复制文件,然后用shell重定向进行覆盖。这将保留原始权限。

如果您的OS X具有
stat
命令

# expand all the templates
find "$OUTPUT_PATH" -name "*.template" | while read FILE ; do
    savemod=$(stat -c "%a" "$FILE")
    sed \
        -e "s/%{NAME}/$OPTION_NAME/g" \
        -e "s/%{TITLE}/$OPTION_TITLE/g" \
        -e "s/%{VERSION}/$OPTION_VERSION/g" \
        -e "s/%{WHEN}/$OPTION_WHEN/g" \
            "$FILE" > "${FILE%.*}"
    chmod $savemod "${FILE%.*}"

    rm -f "$FILE"
done

如果没有
-c
选项,请检查“格式”下的。您可以找到类似的方法来获取文件的权限/模式。

使用格式开关切换到FreeBSD stat如何:

stat -f "%p" ~/.bashrc
stat -f "%Sp" ~/.bashrc

stat -f "%u:%g:%p" ~/.bashrc

stat(1)
没有
-c
选项。我认为您必须在OSX上
stat-r$FILE | cut-f3-d''
才能获得八进制权限位图。
-r
输出
struct stat
的“原始”内容,第三列是文件模式。查看手册页,也有类似的方法与
-c
相同,但我没有OSX,所以无法测试。@bavariable:我想我读得比你快:)@bash-o-logist:
stat-r
和一点
剪切
来切掉有趣的部分。@mu太短了。找到了你的一些其他答案来投票:)跨平台shell脚本,很好:)