どうすれば pastescript
コマンド(TypeScript; "man script")から出力され、読みやすくなりますか?
Script started on 2017-10-27 06:20:56-0700
]0;thufir@dur: ~/IdeaProjects[01;32mthufir@dur[00m:[01;34m~/IdeaProjects[00m$
]0;thufir@dur: ~/IdeaProjects[01;32mthufir@dur[00m:[01;34m~/IdeaProjects[00m$ tree
[01;34m.[00m
├── kotlin
└── [01;34mkotlinHelloWorld[00m
├── kotlinHelloWorld.iml
├── [01;34mout[00m
│ └── [01;34mproduction[00m
│ └── [01;34mkotlinHelloWorld[00m
└── [01;34msrc[00m
└── Main.kt
5 directories, 3 files
]0;thufir@dur: ~/IdeaProjects[01;32mthufir@dur[00m:[01;34m~/IdeaProjects[00m$
]0;thufir@dur: ~/IdeaProjects[01;32mthufir@dur[00m:[01;34m~/IdeaProjects[00m$ cat kotlinHelloWorld/src/Main.kt
class Main {
fun main(args: Array<String>) {
println("Hello, world!")
}
}]0;thufir@dur: ~/IdeaProjects[01;32mthufir@dur[00m:[01;34m~/IdeaProjects[00m$
]0;thufir@dur: ~/IdeaProjects[01;32mthufir@dur[00m:[01;34m~/IdeaProjects[00m$ exit
exit
Script done on 2017-10-27 06:21:19-0700
ちらつき(?)は、この場合、gnome-terminal
色を反映しています。はい、別のシェルや別のコンソールなどを使用することで、その「意味のない」ものを生成しないようにすることができます。問題は、script
コマンドを適切に取得して記録しないようにするか、Pastebin
ユーティリティ(または同様のGist-paste
など)を取得して「適切に」処理する方法です。
まず、回答ありがとうございます。第二に、これによって水が濁らないことを願っています。
thufir@dur:~$
thufir@dur:~$ script trying_to_eliminate_control_chars.txt
Script started, file is trying_to_eliminate_control_chars.txt
thufir@dur:~$
thufir@dur:~$ echo "hi"
hi
thufir@dur:~$
thufir@dur:~$ echo "hi"
hi
thufir@dur:~$
thufir@dur:~$ echo "hmm"
hmm
thufir@dur:~$
thufir@dur:~$ exit
exit
Script done, file is trying_to_eliminate_control_chars.txt
thufir@dur:~$
thufir@dur:~$ cat trying_to_eliminate_control_chars.txt > foo.txt
thufir@dur:~$
thufir@dur:~$ cat foo.txt
Script started on 2017-10-31 17:51:29-0700
thufir@dur:~$
thufir@dur:~$ echo "hi"
hi
thufir@dur:~$
thufir@dur:~$ echo "hi"
hi
thufir@dur:~$
thufir@dur:~$ echo "hmm"
hmm
thufir@dur:~$
thufir@dur:~$ exit
exit
Script done on 2017-10-31 17:51:47-0700
thufir@dur:~$
thufir@dur:~$ cat trying_to_eliminate_control_chars.txt
Script started on 2017-10-31 17:51:29-0700
thufir@dur:~$
thufir@dur:~$ echo "hi"
hi
thufir@dur:~$
thufir@dur:~$ echo "hi"
hi
thufir@dur:~$
thufir@dur:~$ echo "hmm"
hmm
thufir@dur:~$
thufir@dur:~$ exit
exit
Script done on 2017-10-31 17:51:47-0700
thufir@dur:~$
thufir@dur:~$ Pastebin foo.txt
Pastebin: command not found
thufir@dur:~$
thufir@dur:~$ pastebinit foo.txt
http://paste.ubuntu.com/25862228/
thufir@dur:~$
上記 貼り付けnotには制御文字が含まれていると単純に期待できますが、は。これは、terminal自体(または私が推測する)がそれらを処理/非表示にしているためです。
プレイ中の非常に低レベルのテキストファイルなど。さらに、端末エミュレーションの仕組みに関する非常に詳細な知識。率直に言って、私を少し超えています。
コマンドの出力ファイル script
を特殊文字から処理およびクリーンアップするために、以下のリファレンス内で提供されるすべてのソリューションをテストしました。
私のUbuntu 16.04では、次のソリューションのみが満足のいく結果を提供します。
Perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' TypeScript | col -b > TypeScript.new
または、出力をアップロードクライアントプログラムに直接パイプすることができます。
Perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' TypeScript | col -b | pastebinit
上記のコマンドはpastebinit
で機能するため、インストールします。
Sudo apt install pastebinit
参照:
上記のソリューションに基づいて、カスタムコマンドを作成することをお勧めします。名前を付けましょうspaste。
1。spaste
という名前の実行可能スクリプトファイルを作成します。これは、シェルコマンドとしてアクセスできるように/usr/local/bin
にあります。
Sudo touch /usr/local/bin/spaste
Sudo chmod +x /usr/local/bin/spaste
Sudo nano /usr/local/bin/spaste
nano
に:貼り付け ShiftIns;セーブ CtrlOEnter;出口 CtrlX。#!/bin/bash
# Name: spaste
# Location: /usr/local/bin
#export LC_ALL=C
# If the first input parameter is option - see: script --help; or type `script --help`
[[ "${1}" =~ -.* ]] && TARGET_FILE="$2" || TARGET_FILE="$1"
# If the variable $TARGET_FILE is empty, use the default output file name
[[ -z "${TARGET_FILE}" ]] && TARGET_FILE="TypeScript"
# The main function - Remove color codes, etc.
script_remove_extras() {
script "$@"
Perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' "$TARGET_FILE" | col -b > "/tmp/$USER-cpaste-$TARGET_FILE.tmp"
cp "/tmp/$USER-cpaste-$TARGET_FILE.tmp" "$TARGET_FILE"
}
# Upload to 'pastebinit'
upload_pastebinit() { pastebinit < "$TARGET_FILE"; }
# GUI mode with 'chromium' or 'firefox'; CLI mode with 'lynx'; Just upload with 'pastebinit'; Just clear the outputfile
if [ "$SPASTE_MODE" == "chromium" ]; then
script_remove_extras "$@"; Nohup chromium-browser "$(upload_pastebinit)" >/dev/null 2>&1 &
Elif [ "$SPASTE_MODE" == "firefox" ]; then
script_remove_extras "$@"; Nohup firefox "$(upload_pastebinit)" >/dev/null 2>&1 &
Elif [ "$SPASTE_MODE" == "lynx" ]; then
script_remove_extras "$@"; lynx "$(upload_pastebinit)"
Elif [ "$SPASTE_MODE" == "upload" ]; then
script_remove_extras "$@"; upload_pastebinit
else
script_remove_extras "$@"
fi
2。説明:
新しいコマンドspaste
を実行すると、コマンドscript
が呼び出され、ユーザーの入力パラメーターが割り当てられます。したがって、呼び出し構文はコマンドscript
と同じです。詳細については、script --help
を参照するか、spaste --help
と入力してください。
Usage:
spaste (script) [options] [file]
Make a TypeScript of a terminal session.
Options:
-a, --append append the output
-c, --command <command> run command rather than interactive Shell
-e, --return return exit code of the child process
-f, --flush run flush after each write
--force use output file even when it is a link
-q, --quiet be quiet
-t, --timing[=<file>] output timing data to stderr (or to FILE)
-V, --version output version information and exit
-h, --help display this help and exit
exit
と入力してscript
コマンドのセッションを終了すると、spaste
はscript
の出力ファイルを処理して、コマンドpastebinit
に出力します。
結果としてpastebinit
は、アップロードされたscript
の出力ファイルのコンテンツへのリンクを返します。
新しいコマンドspaste
には、pastebinit
によって返されるリンクを処理する方法がいくつかあります。これらのモードは、コマンドspaste
の実行前に、異なる値を持つ変数$SPASTE_MODE
をエクスポートすることで切り替えることができます。
$ export SPASTE_MODE=
$ spaste
使用可能なモードは次のとおりです。
SPASTE_MODE=chromium
-返されたリンクをChromiumで開きます。SPASTE_MODE=firefox
-返されたリンクをFireFoxで開きます。SPASTE_MODE=lynx
-返されたリンクLynx(ターミナルブラウザー)を開きます。SPASTE_MODE=upload
-返されたリンクを出力するだけです。SPASTE_MODE=
-リンクを返しません。出力ファイルのコンテンツを処理するだけです。~/.bashrc
ファイルからお気に入りのモードをエクスポートできます。たとえば、次の行を下部に追加します。
export SPASTE_MODE=firefox
3。使用法のデモンストレーション:
これはあなたが探している答えではないと思いますが、うまくいきます:
script
を実行し、TypeScript
ファイルを作成したら、cat TypeScript
を実行します。すべてのエスケープシーケンスは端末によって消費されるため、出力は色付きのプレーンテキストです。 (マウスを使用して)手動でコピーすると、プレーンテキストとしてクリップボードに保存されます。必要な場所に貼り付けます。