Uyarıyı nasıl düzeltebilirim: komut değiştirme: girişte yoksayılmış boş bayt?


12

Notify-send kullanması gereken, ancak kök olarak çalışan bir komut dosyası var. İşe yaradığını bulduğum tek şey bu senaryo . Sorun şu:

DBUS_SESSION=`grep -z DBUS_SESSION_BUS_ADDRESS /proc/$DBUS_PID/environ | sed -e s/DBUS_SESSION_BUS_ADDRESS=//`

Hatayı almaya devam ediyorum

warning: command substitution: ignored null byte in input

Hata mesajını nasıl düzeltir veya silerim?
Bu arada aşağıdakiler bastırmaz:

2> /dev/null
> /dev/null
>> /dev/null
> /dev/null 2>&1
2>&1

Yanıtlar:


15

Bu uyarı, Bash-4.4'te yeni bir özellik gibi görünmektedir - bkz. Örneğin null baytlarla komut değiştirme uyarı oluşturur .

Seçeneklerden biri, boru hattınızdaki boş baytı çıkarmak veya ör.

DBUS_SESSION=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$DBUS_PID/environ | tr '\0' '\n' | sed -e s/DBUS_SESSION_BUS_ADDRESS=//)

(geri $(. . .)dönüşler yerine modern komut yerine koyma şekline geçtim ).

Alternatif olarak, bash kabuğunun yerleşik readkomutunu kullanabilirsiniz; bu, doğrudan sınırlayıcılarla doğrudan ilgilenebilir;

IFS== read -d '' _ DBUS_SESSION < <(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$DBUS_PID/environ)

(null ile ayrılmış grep çıktısını =karakterle ayrılmış iki jetona bölün ; ilki önemsiz değişkene _ve ikincisine atayın DBUS_SESSION).

[Bunları gerçekten test edemedim çünkü bash'ın uygun bir versiyonuna sahip değilim]


tr -d '\0'tamam da?
Konard
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.