سؤال
في tcsh أحاول إعادة توجيه STDERR من أمر من ملف .aliases الخاص بي.
لقد وجدت أنه يمكنني إعادة توجيه STDERR من سطر الأوامر مثل هذا...
$ (xemacs > /dev/tty) >& /dev/null
...ولكن عندما أضع هذا في ملف .aliases الخاص بي، أحصل على حلقة اسم مستعار...
$ cat .aliases
alias xemacs '(xemacs > /dev/tty ) >& /dev/null'
$ xemacs &
Alias loop.
$
...لذلك قمت بوضع شرطة مائلة عكسية قبل الأمر في الأسماء المستعارة، مما يسمح بتشغيل الأمر...
$ cat .aliases
alias xemacs '(\xemacs > /dev/tty ) >& /dev/null'
$ xemacs &
[1] 17295
$
...لكن الآن لا يمكنني إعطاء الأمر أي وسيطات:
$ xemacs foo.txt &
Badly placed ()'s.
[1] Done ( \xemacs > /dev/tty ) >& /dev/null
$
هل من أحد يستطيع عرض حلولا ما؟شكرا لكم مقدما!
تحديث:ما زلت أشعر بالفضول لمعرفة ما إذا كان من الممكن إعادة توجيه STDERR في tcsh من الأسماء المستعارة، ولكن كما تم اقتراحه هنا، انتهى بي الأمر باستخدام برنامج نصي لـ Shell:
#!/bin/sh
# wrapper script to suppress messages sent to STDERR on launch
# from the command line.
/usr/bin/xemacs "$@" 2>/dev/null
المحلول
أظن أن هذه هي الحالة التي يكون فيها عدم استخدام اسم مستعار هو الخيار الأفضل - حاول استخدام برنامج نصي Shell بدلاً من ذلك:
#!/bin/tcsh
(xemacs $* > /dev/tty ) >& /dev/null
نصائح أخرى
يحاول
alias emacs '(\emacs \!* > /dev/tty) >& /dev/null'
تأتي رسالة "وضعت بشكل سيئ ()" من وضع معلمة الإدخال في غير موضعها في emacs.بدون ال "\!*
"في تعريف الاسم المستعار"emacs abc
"يصبح
(/usr/bin/emacs > /dev/tty) >& /dev/null abc
مع ال "\!*
"متضمنة"emacs abc
"يصبح
(/usr/bin/emacs abc > /dev/tty) >& /dev/null