コマンドラインオプション-noautosaveを使用してneditを起動するようにエイリアスを設定したいと思います(テキストファイルは最大500 MBです)。単純に見えるもの:
alias nn="nedit -noautosave $1 &"
ただエラーが発生します。「許可が拒否されました」他のファイルと異なるエラー一致する ''' の検索中に予期しない EOF が発生しました。そして「予期しないファイルの終わり」。
Googleで検索した後に見つけた解決策の1つは引用符を確認することですが、可能なエラーは表示されません。
また、関数宣言を試みました。
function nn () { nedit -noautosave $1 &}
また、同じエラーで失敗しました。
答え1
開こうとしているファイルの1つが指定されたサイズより大きい場合にのみ実行するには、以下を試してください。 (私は100Mを使用しましたが、サイズ制限を直接設定できます。nedit
)-noautosave
function nn() {
big=0;
let big+=$(find "$@" -size +100M|wc -l)
if [ $big -gt 0 ]; then
nedit -noautosave -- "$@" &
else
nedit -- "$@" &
fi
}
からman nedit
:
-- Treats all subsequent arguments as file names,
even if they start with a dash. This is so NEdit
can access files that begin with the dash
character.
答え2
に引数を渡すことはできませんalias
。 aを使う必要があるのでfunction
正しい方向に行っているのです。function
コマンドを使用するとタイプミスが発生しました。ただし、次のいずれかが行われます。
$ nn () { nedit -noautosave -- "$@" & }
-または-
$ function nn() { nedit -noautosave -- "$@" & }
削除する必要がある場合は、unset
コマンドを使用してください。つまりunset -f nn
。
この方法で一連のファイルを開くには、代わりにを使用します"$@"
。$1
bash
マニュアルページから抜粋
@ Expands to the positional parameters, starting from one. When the
expansion occurs within double quotes, each parameter expands to a
separate word. That is, "$@" is equivalent to "$1" "$2" ... If
the double-quoted expansion occurs within a word, the expansion of
the first parameter is joined with the beginning part of the original
word, and the expansion of the last parameter is joined with the last
part of the original word. When there are no positional parameters,
"$@" and $@ expand to nothing (i.e., they are removed).
はい
$ function nn() { nedit -noautosave -- "$@" & }
$ nn ~/.bashrc
[3] 19830
答え3
エイリアスの目的全体が-noautosave
編集するすべてのファイルにオプションを適用することである場合
alias nn='nedit -noautosave'
それだけで十分です。その後、次のように使用できます。
nn your_file &
答え4
alias nn="nedit -noautosave $1 &"
変数拡張は二重引用符として解釈されます。シェルコマンドラインでコマンドを実行すると、.bashrc
位置引数(シェルに渡された引数)がないため、$1
拡張は空の文字列で構成され、エイリアス値はですnnedit -noautosave &
。だから実行するnn /path/to/file.txt
とに拡張されますnnedit -noautosave & /path/to/file.txt
。 「権限が拒否されました」というエラーメッセージは/path/to/file.txt
実行できないために発生します。
エイリアスを使用してalias nn='nedit -noautosave $1 &'
拡張を防ぎ、内部を保存できます。$1
しかし、エイリアスはパラメータを使用せずにその場で置き換えられるため、これは良くありません。したがって、$1
エイリアスを拡張すると、最初の位置引数に置き換えられます。これは以前より優れていません。
function nn () { nedit -noautosave $1 &}
これは基本的に正しいです。以前と同じエラーが発生した場合、エイリアスはnn
まだ定義されており、同じ名前の関数よりも優先されます。unalias nn
エイリアス定義を解放するために使用されます。
関数は次のように書く必要があります。
function nn () { nedit -autosave "$@" & }
ファイル名にスペースまたはワイルドカードがある場合は、二重引用符が必要です。"$@"
置換を使用すると、"$1"
複数のパラメータを渡すことができます。