سؤال

في 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top