Замените важную символьную ссылку 'безопасно'

Можно использовать эту функцию помощника, которая позволяет Вам получить высоту Строки состояния на iOS и Android. Для iOS вычисление сделано для получения другой высоты StatusBar, когда> = iPhone X (с меткой) используется.

import { Dimensions, Platform, StatusBar } from 'react-native';

const X_WIDTH = 375;
const X_HEIGHT = 812;

const XSMAX_WIDTH = 414;
const XSMAX_HEIGHT = 896;

const { height, width } = Dimensions.get('window');

export const isIPhoneX = () => Platform.OS === 'ios' && !Platform.isPad && !Platform.isTVOS
    ? width === X_WIDTH && height === X_HEIGHT || width === XSMAX_WIDTH && height === XSMAX_HEIGHT
    : false;

export const StatusBarHeight = Platform.select({
    ios: isIPhoneX() ? 44 : 20,
    android: StatusBar.currentHeight,
    default: 0
})
20
задан Michał Górny 6 September 2009 в 08:53
поделиться

2 ответа

Переименование ( mv ) атомарная операция; создание новой символической ссылки нет (удалите старую символическую ссылку; создайте новую). Поэтому вам следует использовать mv :

$ ln -s new current_tmp && mv -Tf current_tmp current

Вот сообщение в блоге , в котором обсуждается это. Кроме того, если вы беспокоитесь о том, что произойдет, почему бы сначала не попробовать это на некритичной символической ссылке?

23
ответ дан 30 November 2019 в 01:05
поделиться

Похоже (со страницы руководства) ln -f отключает символическую ссылку перед созданием новой, что означает, что mv - лучший вариант для этого.

Я бы, однако, настоятельно рекомендовал вместо связывания / bin / sh с bash . Многие сценарии используют:

#!/bin/sh

и написаны в предположении, что оболочка является классической оболочкой Борна. Если бы вместо этого был запущен bash , вы могли бы легко получить неясную несовместимость между тем, что предполагает сценарий sh , и тем, что на самом деле делает bash . Их будет практически невозможно отследить.

-1
ответ дан 30 November 2019 в 01:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: